2014-01-22 74 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