2016-08-18 4 views
0

2番目のテーブルの一意のNULLではない属性に外部キーを追加したいとします。ここではそれがどのように見えるか:ここでユニークインデックスプロパティのEntity Framework 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; } 
    } 

モデルビルダーです:SQL Serverは、このソリューションを受け入れながら

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

エンティティフレームワークでエラーが発生します。

{」は、一つ以上の検証エラーをモデル 生成中に検出された:ここでデバッグ中Visual Studioでエラーがある\ R \ n \ R \ nT_Measurements_T_AlarmTresholds_Source_T_Measurements_T_AlarmTresholds_Target: :の依存ロールのすべてのプロパティのタイプ の制約は、 プリンシパルロールの対応するプロパティタイプと同じでなければなりません。エンティティ のプロパティ 'MeasurementGuid'のタイプ 'T_AlarmTresholds'がエンティティ のプロパティ 'ID'のタイプと一致しません。 'T_Measurements'参照制約 'T_Measurements_T_AlarmTresholds'。\ r \ n "}

答えて

0

あなた自身があなたがT_AlarmTresholdsに新しいプロパティを作成する必要があり、仮想オブジェクトに外部キーを入れないでください:

public int T_MeasurementsId{get; set;} 

が外部キーとして機能します。これにより、依存関係プロパティ(仮想オブジェクト)が自動的にリンクされます。また、仮想プロパティからForiegnKey属性を削除する必要があります。


編集: はちょうどあなたが代わりにMeasurementGuidプロパティに外部キー属性を追加したいと思うので、あなたのコードは、主キーとしてId列を使用する代わりに、GUIDを使用していないことを発見。

+0

実際には、データベースはすでに外部キー依存性のためにguidを使用しています。 – miechooy

+0

@miechooyは私の更新を参照してください - 主なポイントです - 依存性プロパティーに外部キー属性を入れません。 –