LINQ需要表上的主键吗?

时间:2013-10-16 19:27:44

标签: .net linq entity-framework linq-to-sql primary-key

我已经看到没有主键的表没有出现在LINQ的向导中,也无法拖到dbml文件中。有没有人面临同样的行为?任何人都可以解释为什么表需要主键通过LINQ访问?

1 个答案:

答案 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}}。