我已经看到没有主键的表没有出现在LINQ的向导中,也无法拖到dbml文件中。有没有人面临同样的行为?任何人都可以解释为什么表需要主键通过LINQ访问?
答案 0 :(得分:1)
实体框架需要主键(或某种键)才能正常工作。这是因为任何被数据上下文拉下来的实体都需要有一种方法来区分(和匹配)自己与其他实体。举个例子:
// Two different variables, but should pull the same entity.
var entity1 = context.Entities.First();
var entity2 = context.Entities.First();
entity2.PropertyA == "OldValue" // Evaluates to true.
entity1.PropertyA = "NewValue";
context.SaveChanges();
// entity2 is updated despite not having its property directly modified
// by this code.
entity2.PropertyA == "NewValue" // Evaluates to true.
这些实体通过Entity Key保持彼此同步,this answer通过主键在数据库中是唯一的。您仍然可以手动映射,并告诉EF识别每个实体的内容,但它无法自动识别出来。有关“为什么我不能通过向导执行此操作”部分问题的更多信息,请参阅{{3}}。