0

我已经看到没有主键的表没有出现在 LINQ 的向导中,也不能拖到 dbml 文件中。有没有人遇到过同样的行为?谁能解释为什么表需要主键才能通过 LINQ 访问?

4

1 回答 1

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.

这些实体通过一个实体密钥保持同步,该实体密钥通过主密钥在数据库中是唯一的。您仍然可以手动映射它并告诉 EF 标识每个实体的内容,但它无法自动找出。有关您问题的“为什么我不能通过向导执行此操作”部分的更多信息,请参阅此答案。

于 2013-10-17T13:06:09.980 回答