2016-08-18 54 views
0

我希望在第二個表中的唯一非空屬性上添加外鍵。這裏怎麼看起來像:唯一索引屬性上的實體框架FK

public class T_AlarmTresholds 
    { 
     [Key] 
     public int Id { get; set; } 
       .... 
       ....     
     public Guid MeasurementGuid { get; set; } 

     [ForeignKey("MeasurementGuid")] 
     public virtual T_Measurements Measurement { get; set; } 
    } 


public partial class T_Measurements 
    { 
     public int Id { get; set; } 
     [Index("UC_Guid", IsUnique = true)] 
     public Guid GUID { get; set; } 
    } 

這裏是模型構造器:

modelBuilder.Entity<T_Measurements>() 
       .HasMany(x => x.T_AlarmTresholds) 
       .WithRequired(x => x.Measurement) 
       .HasForeignKey(x => x.MeasurementGuid); 

實體框架拋出錯誤,而SQL服務器接受此解決方案。這是錯誤的Visual Studio調試時:

{「模型中檢測到一個或多個驗證錯誤 代:\ r \ n \ r \ nT_Measurements_T_AlarmTresholds_Source_T_Measurements_T_AlarmTresholds_Target: :該類型的從屬角色的所有屬性參考 約束必須與 主體角色中相應的屬性類型相同。實體 'T_AlarmTresholds'上的屬性'MeasurementGuid'類型與實體 'T_Measurements'中的屬性'ID'類型不匹配參考約束 'T_Measurements_T_AlarmTresholds'。\ r \ n「}

回答

0

你不把外鍵本身需要在T_AlarmTresholds創建一個新的屬性的虛擬對象:

public int T_MeasurementsId{get; set;} 

充當外鍵。依賴項屬性(虛擬屬性)將自動鏈接。您還需要從虛擬屬性中刪除ForiegnKey屬性。


編輯: 就發現你的代碼不使用ID列作爲主鍵,而是使用GUID,所以你不是想外鍵屬性添加到MeasurementGuid財產。

+0

的確但數據庫已經被設計爲使用GUID的外鍵依賴 – miechooy

+0

@miechooy看我的更新 - 主要觀點代表 - 你不把外鍵屬性的依賴屬性。 –