我们在使用Entity Framework的时候经常会把数据库中的某一个视图映射为EF的实体,但是如果数据库视图中的列没有包含表的主键列,EF会报出警告说视图没有主键,导致映射为实体失败错误如下:
表/视图“{0}”未定义主键,无法推断有效的主键。已排除该表/视图。要使用该实体,您将需要检查架构,添加正确的键并对它取消注释。
English translation: The table/view ‘{0}‘ does not have a primary key defined and no valid primary key could be inferred. This table/view has been excluded. To use the entity you will need to review your schema, add the correct keys and uncomment it.
这时候我们需要在视图里面用sql的isnull函数生成一列不为null的为一列就行了。
比如假设现在我们的数据库中本来有一个视图叫V_Customer,它返回的列中没有包含查询表dbo.CustomersBoughtCarsSurvey的主键列,其Sql脚本如下:
CREATE VIEW [dbo].[V_Customer] AS SELECT Name, Age, Sex, Nation, City FROM dbo.CustomersBoughtCarsSurvey
那么这个视图是无法映射为Entity Framework的实体的,现在我们修改视图增加一个自动生成GUID值的列叫ID,并且使用ISNULL函数确保该列值不为空,脚本如下:
CREATE VIEW [dbo].[V_Customer] AS SELECT ISNULL(NEWID(), ‘d1e57ca7-6eee-495a-be13-73d5e7d51f36‘) AS Id, Name, Age, Sex, Nation, City FROM dbo.CustomersBoughtCarsSurvey
我们可以看到现在在视图中多了一列id,且是not null的,现在就
时间: 2024-10-09 22:09:14