2014-01-22 44 views
0

我已经从我的数据库中生成了我的模型。其中一个模型的样子:MVC实体框架无法找到密钥

namespace LV.Models 
{ 
    using System; 
    using System.Collections.Generic; 

    public partial class Ac 
    { 
     public int IdAc { get; set; } 
     public int IdEmp { get; set; } 
     public Nullable<System.DateTime> dtd{ get; set; } 
     public Nullable<int> Sn{ get; set; } 
     public Nullable<bool> A{ get; set; } 
     public Nullable<int> IdSi{ get; set; } 
     public Nullable<bool> Gest{ get; set; } 
     public Nullable<int> IdResp { get; set; } 
     public string SigXML { get; set; } 
     public Nullable<bool> Read { get; set; } 
     public Nullable<System.DateTime> EndDate{ get; set; } 
     public string dpd{ get; set; } 
     public string gda { get; set; } 
     public string typeaq { get; set; } 
     public byte[] attch { get; set; } 
     public string exten { get; set; } 

     public virtual AC emps { get; set; } 
    } 
} 

当我尝试创建一个控制器,它说,has no key defined。我试过来自其他帖子的解决方案,其中说我必须使用[Key],它创建我的控制器,但是当我运行该项目时,它引发另一个异常,说the following table cannot be created。它说因为表已经存在。

我使用Visual Studio 2013点快速与EF 6 <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />

主键是idAc。它也是身份。如果我检查图表,就是这么说的。

从我所看到的,映射是好的。我所有的键,关系,主键,标识字段在图中标识。

+1

你的数据库中的主键是哪一列?你真的有主键吗? – Robert

+0

我编辑了帖子。请检查底部。 – tzortzik

+0

你的编辑不会帮助..你的数据库表中是否有一个主键? – BenjaminPaul

回答

0

我找到了解决方案。当我生成edmx文件时,他问我是否要保存连接字符串。那时我选择不保存它。后来我看到在我的edmx属性中有一个空的连接字符串。

我删除了edmx,我生成了一个新的,这次保存了连接字符串。从这一刻起,一切顺利。

0

试试这个:

[Key] 
[Column("idAc")] 
public int IdAc { get; set; } 

我怀疑的映射可能是大小写敏感的,因此,当您指定[Key],EF简单地查找一个名为IdAc列,而不是找到它。

我知道您使用的是EDM设计器,所以如果没有解决这个问题,EDM设计师可能会搞乱这个映射。尝试将该属性重命名为与该列相同(即idAc)或检查this workaround

而且,请注意,如果你不使用[Key]或流利的API .HasKey方法来指示哪个属性是关键,在默认情况下,EF uses the code-convention使用属性具有相同名称的实体(有或无“标识的“ 到底)。

+0

所有列的名称都与数据库中的名称完全相同。我不知道EDM设计师是否搞乱了映射,但我知道它读取表格结构并且它的关系非常好。 – tzortzik