2016-07-11 14 views
0

ブリッジテーブルProductFeatureを使用して結合されたProductテーブルとFeatureテーブルがあります。以下は、これらの3つのテーブルの簡略版です。これらはうまく動作します。ここでは問題ありません。複数のテーブルを結合するブリッジテーブル

[Table("Products")] 
public partial class ProductEntity 
{ 
    public int Id { get; set; } 
    public string Code { get; set; } 
    public ICollection<ProductFeatureEntity> productFeatures {get; set;} 
} 

[Table("Features")] 
public partial class FeatureEntity 
{ 
    public int Id { get; set; } 
    public string Code { get; set; } 
    public ICollection<ProductFeatureEntity> productFeatures {get; set;} 
} 

[Table("ProductFeatures")] 
public partial class ProductFeatureEntity 
{ 
    [Key, Column(Order = 1)] 
    public int ProductId { get; set; } 
    [Key, Column(Order = 2)] 
    public int FeatureId { get; set; } 

    public int SequenceNbr {get; set;} 

    public ProductEntity Product {get; set;} 
    public FeatureEntity Feature {get; set;} 
} 

今、同じブリッジテーブルをProductテーブル自体に追加できるようにする必要があります。別の言葉で言えば、「製品は複数の機能を持つことができます」から「製品は複数の機能を持つことができ、複数のサブ製品を持つこともできます」から変更する必要があります。 SequenceNbrフィールドで制御されるシーケンスを、各フィーチャーとサブプロダクトで知る必要があるため、同じブリッジテーブルを使用する必要があります。 EFでこれを行うことは可能ですか?

答えて

0

あなたはProductEntityParentIdを追加し、Configurationクラスでこれを使用することができます。

HasMany(x => x.ProductEntity).WithOptional() 
.HasForeignKey(x => x.ParentId); 

それとも DbContextOnModelCreating方法でこれを使用します。

modelBuilder.Entity<ProductEntity>() 
.HasOptional().WithMany().HasForeignKey(x=>x.ParentId) 
+0

を私はちょうどそれができるようにすることであると思いますシーケンシング能力を失った自分自身を参照してください。 ProductFeatureテーブルには、SequenceNbrフィールドがあります。私はそのテーブルに製品を追加する必要があります。 –

+0

これはProductEntity用であり、サブ製品を作成してParentIdを記入することができ、すべての製品またはサブ製品にProductFeatureEntityがあり、SequenceNbrフィールドが使用されます。 – AmirhosseinYari

+0

サブ製品の順序をどのように知ることができますか?前述したように、製品は複数の機能とサブ製品を持つことができ、製品に付属する各機能またはサブ製品の順序はインポートです。たとえば、ProductAにはFeature2、Sub-product1、およびFeature1があります。私のプロセスでは、ProductAのために、Feature2が最初に来て、次がSub-Product1であり、次がFeature1であることを知る必要があります –

関連する問題