Entity Framework(EF)无法对没有主键的视图映射实体

Entity Framework(EF)无法对没有主键的视图映射实体


在使用 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 的列就行了。

比如原有视图为

CREATE VIEW [dbo].[ViewName]
AS
SELECT    Column1, Column2, Column3, Column4, Column5
FROM      dbo.TableName

这个视图无法映射 EF 视图,可以修改视图增加一个自动生成 GUID 值得列 Id_ColumnName,并且使用 ISNULL 函数确保值不可为空,代码如下:

CREATE VIEW [dbo].[ViewName]
AS
SELECT    ISNULL(NEWID(),'Guid_Value') AS Id_ColumnName, Column1, Column2, Column3, Column4, Column5
FROM      dbo.TableName

这样视图就会多出 Id_ColumnName 列,并且是 not null 的。这样就可以在 EF 里映射为实体了。

字段名解释
ViewName视图名称
Column1~N列名称
TableName表名称
Id_ColumnName新主键列名称
Guid_Value常量值

备注

  1. 要将数据库的一个视图映射为 Entity Framework 的实体,一定要确保该视图中有一列值是唯一的且是 not null 的就可以。
  2. ISNULL 函数的第二个参数是一个常量,如:5757E7EF-2F19-4408-B413-8F1B33B9895F,这样 Sql Server 才可以判断出该列的值肯定不为 null。否则该列仍未可以 null,最后依然无法映射 EF 的实体。
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值