在实体框架中分配实体密钥

时间:2013-04-15 21:03:09

标签: c# entity-framework

我对实体框架中实体密钥的分配有非常精确的了解。

当您将变量设置为实体的实体键时,如果您首先执行代码或首先执行模型,则将该列设置为标识,但如果我在模型的默认构造函数中将实体键指定为0,该怎么办?上课,EF做什么?

EF会注意到它是自动分配并忽略我在构造函数中设置的默认值吗?

或者,除了在检索数据时,我是否应该永远不分配实体密钥?

1 个答案:

答案 0 :(得分:1)

到目前为止,我还没有看到第一个场景,即设置EntityKey对象绝对没有其他选择。但我认为你不是指那个,而是设置一个关键的

当密钥由数据库(标识列)生成时,几乎不需要设置主键值。如果您希望EF插入实体,则不设置主键,但是将EntityState设置为Added(直接或间接)。

我可以想到一个设置主键值有用的场景:使用stub entities。例如,假设您知道必须删除ID值为3的对象A,但尚未从数据库中提取对象A.因此,没有对象可以将状态更改为Deleted。在这种情况下,您可以通过创建仅填充其Id值的存根实体A来阻止到数据库的往返,将其作为Deleted附加到上下文并保存更改。