2013-08-25 52 views
1

我忙於創建我的第一個EF代碼第一個模型,並且遇到了一個稍微令人困惑的問題。外部關鍵關係EF代碼優先

我有許多模型類,每個模型類都繼承自一個基本模型類,它具有三個我想在所有模型類中使用的公共屬性。這些屬性是Id,LastUpdated和LastUpdatedBy。

Id是每個模型類的主鍵。 LastUpdated是我的'用戶'模型類的外鍵。 LastUpdatedBy是一個日期時間字段,指示記錄上次修改時間。

所以我想設置爲我的基類,以我的「用戶」模型類的1比1外鍵關係,但我收到了異常:

多重不合法角色'Profile_LastUpdatedByUser_Source' 處於「Profile_LastUpdatedByUser」關係中。由於相關 角色屬性都不是關鍵屬性,綁定的 多重從屬角色的上必須是「*」

這是我的模型庫類:

public class ModelBase 
    { 
     public int Id { get; set; } 
     public DateTime LastUpdated { get; set; } 

     [ForeignKey("LastUpdatedByUser")] 
     [Required] 
     public int LastUpdatedByUserId { get; set; } 

     public virtual User LastUpdatedByUser { get; set; } 
    } 

這是一個我的模型類:

public class Profile : ModelBase 
    { 
     [StringLength(25, MinimumLength=1)] 
     [Required(ErrorMessage="First Name is Required")] 
     public string FirstName { get; set; } 

     [StringLength(25, MinimumLength = 1)] 
     [Required(ErrorMessage = "Last Name is Required")] 
     public string LastName { get; set; } 

     [StringLength(25, MinimumLength = 1)] 
     [Required(ErrorMessage = "Email Address is Required")] 
     public string Email { get; set; } 

     public string Mobile { get; set; } 
     public string HomePhone { get; set; } 
     public string WorkPhone { get; set; } 

     public string ImageSource { get; set; } 

     public Squable.Model.Enums.MembershipType.MembershipTypeEnum MembershipType { get; set; } 
    } 

這是我的用戶類別(請忽略密碼屬性,我會解決以後;)):

public class User : ModelBase 
    { 
     public string UserName { get; set; } 
     public string Password { get; set; } 

     public int ProfileId { get; set; } 
     public virtual Profile Profile { get; set; } 
    } 

我不知道我在做什麼是最好的做法,但我可以做一些建議,以便如何解決問題或者只是一些指向正確的方向。

回答

1

移動

public int Id { get; set; } 

到User類和簡介,你也可以更改名稱的用戶ID和以簡檔和移動

public virtual User LastUpdatedByUser { get; set; } 

以文件類。

我在基礎實體中共享Id的經驗不足如果您打算使用Repository和UnitOfWork模式,那麼您以後會遇到很多問題。使用SQL Server Management Studio檢查當前的數據庫結構和表。

More Info TPH

+1

謝謝,這沒有辦法。必須仍然使用[ForeignKey(「LastUpdatedByUserId」)]註釋該屬性。不過我想現在可能會遇到另一個問題!不確定這個代碼的第一件事是否值得麻煩,首先模型和DB首先看起來更有吸引力。 – Damon