实体框架问题"表/视图'没有定义主键。"

时间:2015-08-06 10:41:50

标签: c# .net sql-server entity-framework

我是Entity Framework的新手。我正在使用现有数据库,并且表没有定义主键。当我使用实体框架时,我得到错误"表/视图'没有定义主键。已推断密钥,并将定义创建为只读表/视图。"。我查了几个堆栈溢出解决方案/谷歌,我还有一些问题,

  1. 不是EF使用标识列
  2. 我对将主键添加到表中持怀疑态度,因为它可能会影响上游/下游进程。
  3. 替代/建议吗?
  4. 谢谢,

4 个答案:

答案 0 :(得分:9)

我在戴维斯博客(下面的链接)中找到了一个解决方法来解决这个错误,我会把它粘贴在这里。 http://www.ericsdavis.net/index.php/2009/03/14/entity-framework-and-primary-key-inference/

  1. 如果模型设计器仍处于打开状态,请在Visual Studio中关闭它 在XML编辑器中重新打开.edmx文件;
  2. 找到edmx:StorageModels - >架构 - >实体容器 - > 引用相关表的EntitySet元素;
  3. 在EntitySet元素上,将store:Schema属性重命名为 模式;完全删除商店:名称属性;
  4. 删除打开和关闭DefiningQuery标记及其中的所有内容 他们之间;
  5. 保存并关闭.edmx文件。

    它对我来说就像一个魅力,希望它有所帮助。

答案 1 :(得分:0)

您需要做的就是告诉您的POCO使用哪个列作为主键 如果您的表有IDENTITY列,请告诉它使用它。

[Table("POCOS")]
class POCO {
    [Key]
    int theIdentityColumn {get;set;}
{

答案 2 :(得分:0)

在entityframework中,如果要在任何列上分配主键,请在类的属性上写[Key]。

public class Student
    {

        [Key]
        public int StudentKey { get; set; }

        public string StudentName { get; set; }

    }
and in Entityframework you donot write any thing just use Below class that create automatic Primarykey 

 Class student
    {
    public int id {get;set}
    public string Name {get;set}
    }
more detail why should this happen read below article
[Entity Framework][1]

答案 3 :(得分:-1)

当我在项目中创建要使用的视图时,我遇到了类似的问题 创建之后,我更新了.edmx

相同的错误
  

表/视图'没有定义主键。

我清理了我的解决方案,重建了,关闭了Visual Studio并重新启动它 之后,我重复了清洁和重建解决方案的过程,错误消失了。