繁体   English   中英

实体框架没有在没有标识列的表上工作

[英]entity framework not working on table without identity column

我有下表:

create table tbl
(
    id int identity(1,1),
    val varchar(100)
)

现在,当我使用Entity Framework将对象映射到此表时,它可以工作,但是当我更改表定义时,如下所示:

create table tbl1
(
    id int,
    val varchar(100)
)

实体框架不会将对象映射到此表。 关于为什么会发生这种情况的任何线索都将受到赞赏。

实体框架需要主键才能从数据库生成模型。 如果表上没有主键,它将只选择不可为空的列作为连接的主键,并且实体将是只读的。

在您的第一个表中,标识定义使您的id列不可为空,因此您可以创建实体。 您应该在添加该表时看到此消息:

“表/视图'tbl1'没有定义主键。已经推断出密钥,并将定义创建为只读表/视图。”

但是在第二个表中没有非可空列,EF无法为其创建实体。 尝试添加时看到该消息:

“表/视图'tbl1'没有定义主键,也没有推断出有效的主键。此表/视图已被排除。要使用该实体,您需要检查您的模式,添加正确的键,并取消注释。“

实体框架通常需要一种方法来区分表中的两个记录,因此需要ID /密钥鉴别器,它不需要是主键约束或唯一键约束或DB层的标识。 但是这个鉴别器,一列或一组列应该有助于实体框架唯一地识别记录并将其与其他记录区分开来。 因此,您需要在C#层的实体类中定义这样的鉴别器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM