我对实体框架中实体密钥的分配有非常精确的了解。
当您将变量设置为实体的实体键时,如果您首先执行代码或首先执行模型,则将该列设置为标识,但如果我在模型的默认构造函数中将实体键指定为0,该怎么办?上课,EF做什么?
EF会注意到它是自动分配并忽略我在构造函数中设置的默认值吗?
或者,除了在检索数据时,我是否应该永远不分配实体密钥?
答案 0 :(得分:1)
到目前为止,我还没有看到第一个场景,即设置EntityKey
对象绝对没有其他选择。但我认为你不是指那个,而是设置一个关键的值。
当密钥由数据库(标识列)生成时,几乎不需要设置主键值。如果您希望EF插入实体,则不设置主键,但是将EntityState
设置为Added
(直接或间接)。
我可以想到一个设置主键值有用的场景:使用stub entities。例如,假设您知道必须删除ID值为3的对象A,但尚未从数据库中提取对象A.因此,没有对象可以将状态更改为Deleted
。在这种情况下,您可以通过创建仅填充其Id值的存根实体A来阻止到数据库的往返,将其作为Deleted
附加到上下文并保存更改。