2010-12-13 8 views
12

コードを最初にEF4(CTP5を使用)を使用すると、外部キーとともに単一のナビゲーションプロパティを追加できます。テーブルに一度だけ。その後、同じタイプの2番目のプロパティを追加すると、2つではなく4つの列に分割されます。Entity Frameworkで同じタイプの2つのナビゲーションプロパティを設定するには

サンプルコード:

このモデルでは、私は単一のプロパティがPressTypeIDという名前PressTypeためAdapterFrameCapabilityテーブルに追加されます。

public class AdapterFrameCapability 
{ 
    [Key] 
    public int AdapterFrameCapabilityID { get; set; } 

    [Required] 
    public int PressTypeID { get; set; } 

    public virtual PressType PressType { get; set; } 
} 

これは私がモデル化する設定ですが、それは、テーブル内に作成された4列、FromPressTypeID、FromPressTypeFromPressTypeID、ToPressTypeIDとToPressTypePressTypeIDに1つずつになります。理想的には、FromPressTypeIDとToPressTypeIDの列が好きです。私はここで間違って何をしていますか?

public class AdapterFrameCapability 
{ 
    [Key] 
    public int AdapterFrameCapabilityID { get; set; } 

    [Required] 
    public int FromPressTypeID { get; set; } 

    [Display(Name = "From Press Type")] 
    public virtual PressType FromPressType { get; set; } 

    [Required] 
    public int ToPressTypeID { get; set; } 

    [Display(Name = "To Press Type")] 
    public virtual PressType ToPressType { get; set; } 
} 

答えて

14

それはあなたが必要なスキーマを取得するにはダウンfluent APIドロップする必要があり、これらのシナリオの一つです:

protected override void OnModelCreating(ModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<AdapterFrameCapability>() 
       .HasRequired(afc => afc.FromPressType) 
       .WithMany() 
       .HasForeignKey(afc => afc.FromPressTypeID) 
       .WillCascadeOnDelete(true); 

    modelBuilder.Entity<AdapterFrameCapability>() 
       .HasRequired(afc => afc.ToPressType) 
       .WithMany() 
       .HasForeignKey(afc => afc.ToPressTypeID) 
       .WillCascadeOnDelete(false); 
} 

カスケードは団体の一つにオフ削除切り替える意図的なものですのでそう SQL Serverのだろう以下のエラーを捨てる:

Introducing FOREIGN KEY constraint 'AdapterFrameCapability_ToPressType' on table 'AdapterFrameCapabilities' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints. Could not create constraint.

だから私は、コードでやったように、関連付けの1つをオフにする必要があります。

0

は、私はあなたのデータ注釈属性

[ForeignKey("FromPressTypeId")] 

などを使用することを想定して考え

関連する問題