2012-09-13 140 views
1

我的模型協會是(我相信)一到一個:實體框架代碼第一種方法 - 一對一的關係

public class Account 
{ 
    [Key] 
    [ForeignKey("BlockedAccount")] 
    public virtual Guid AccountId { get; set; } 
    public virtual string UserName { get; set; } 

    public virtual BlockedAccount BlockedAccount { get; set; } 
} 

public class BlockedAccount 
{ 
    [Key] 
    public virtual Guid BlockedAccountId { get; set; } 
    public virtual int BanLevel { get; set; } 
    public virtual DateTime BannedDate { get; set; } 
    public virtual DateTime ExpirationDate { get; set; } 
    public virtual string Reason { get; set; } 
} 

但是,當我試圖使用它,一旦程序崩潰,它給我以下情況除外:

INSERT語句衝突與外鍵約束 「FK_dbo.Accounts_dbo.BlockedAccounts_AccountId」。數據庫「Accounts」中的 發生衝突,表「dbo.BlockedAccounts」,列 'BlockedAccountId'。該語句已終止。

我在做什麼錯在這裏?我想要AccountId指向BlockedAccountId

回答

1

你如何附加你的實體?您不需要實際設置外鍵,只需附加到導航屬性即可建立連接。此代碼,用你的模型上面爲我工作:

 public class Account 
{ 
    [Key] 
    [ForeignKey("BlockedAccount")] 
    public virtual Guid AccountId { get; set; } 
    public virtual string UserName { get; set; } 

    public virtual BlockedAccount BlockedAccount { get; set; } 
} 

public class BlockedAccount 
{ 
    [Key] 
    public virtual Guid BlockedAccountId { get; set; } 
    public virtual int BanLevel { get; set; } 
    public virtual DateTime BannedDate { get; set; } 
    public virtual DateTime ExpirationDate { get; set; } 
    public virtual string Reason { get; set; } 

    public BlockedAccount() 
    { 
     BannedDate = DateTime.Now; 
     ExpirationDate = DateTime.Now; 
    } 
} 

public class Model : DbContext 
{ 
    public DbSet<BlockedAccount> BlockedAccounts { get; set; } 
    public DbSet<Account> Accounts { get; set; } 
} 
class Program 
{ 

    static void Main(string[] args) 
    { 
     var b = new BlockedAccount() 
      { 
       BlockedAccountId = Guid.NewGuid() 
      }; 
     var a = new Account(); 

     a.BlockedAccount = b; 
     Model m = new Model(); 
     m.Accounts.Add(a); 
     m.SaveChanges(); 
    } 
} 

enter image description here

+0

嘿,我認爲必須有...我執行你的代碼我的模型有毛病我EF和我仍然得到錯誤張貼在第一篇文章...所以,現在我絕對卡住...你也許知道如何重新安裝EF? – ojek

+0

我已經更新了我的整個應用程序的答案 - 你的問題仍然是錯誤的?如果沒有運行EF(5.0)的最新版本,可以使用[nuget](http://nuget.org/packages/EntityFramework)進行更新:install-package entityframework –

+0

好的。所以這很奇怪,當我調整我的代碼以使它與你匹配時,我仍然有錯誤,但是當我複製粘貼它並從我的模型的其餘部分中隔離時,發生了魔法並且一切正常。所以我沒有調試我的模型的起點。謝謝,那幫了我。 :-) – ojek

相關問題