2012-09-05 103 views
0

我有2個實體:實體框架CF流利的API映射

public class User 
{ 
    public int userId { get; set; } 
    public string name { get; set; } 
    public Guid userGuid { get; set; } 
} 

public class Absence 
{ 
    public int absenceId { get; set; } 
    public Guid applicantId { get; set; } 
    public User applicant { get; set; } 
    public Guid permitterId{ get; set; } 
    public User permitter{ get; set; } 
    ... 
} 

AbsencesConfiguration: 
    this.HasRequired(u => u.Applicant).WithMany().HasForeignKey(d => d.ApplicantId); 
    this.HasRequired(u => u.Permitter).WithMany().HasForeignKey(d => d.PermitterId); 

我想在兩個類之間的流暢API映射,但它給出了這樣的錯誤消息:

塊引用\ tSystem .Data.Entity.Edm.EdmAssociationConstraint::參照約束的從屬角色中的所有屬性的類型必須與主體角色中的相應屬性類型相同。實體'Absences'上屬性'ApplicantId'的類型與參考約束'Absences_Applicant'中實體'User'上的屬性'UserId'的類型不匹配。

我認爲這是因爲EF嘗試使用用戶實體的UserId而不是UserGuid列來連接兩個表。我以爲我會讓Absence實體的這兩列獨一無二,但我怎樣才能將它們映射到一起?

在此先感謝。

+0

你指得是什麼框架?它應該被列在你的標籤部分,但我只看到映射和實體框架作爲你的標籤。 JPA也許?如果JPA有什麼實現? –

回答

5

問題是你的用戶主鍵是一個int,但你的外鍵是Guid。

您需要修改或者您的用戶類,以便爲用戶id一個GUID:

public Guid userId { get; set; } 

,或者更新您的缺位類使用int:

public int applicantId { get; set; } 
+1

謝謝你的回答。是的,我知道,但這就是我想要的。我需要int主鍵,我需要Guid外鍵。我的問題是有可能解決這個問題,如果UserGuid列將是唯一的? – sada

+0

那麼userId或userGuid是表的主鍵?如果UserGuid是唯一的,爲什麼不把它用作主鍵,這樣一切都是同步的? –

+0

因爲我想在HTML頁面中使用int UserId,所以我需要Guid UserGuid列與另一個表User表連接。這個Guid來自AD LDS,我不希望數據庫變得不一致,如果AD LDS會改變的話。 – sada