【问题标题】:LINQ require primary key on table?LINQ 需要表上的主键?
【发布时间】:2013-10-16 19:27:43
【问题描述】:

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

【问题讨论】:

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


    【解决方案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 彼此保持同步,该Entity Key 通过主键在数据库中是唯一的。您仍然可以手动映射它并告诉 EF 是什么标识了每个实体,但它无法自动找出它。请参阅this answer,了解有关您问题的“为什么我不能通过向导完成”部分的更多信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-03
      • 1970-01-01
      • 2011-11-22
      • 2016-03-01
      • 2014-06-18
      相关资源
      最近更新 更多