0

私はDbContextを持っています。これは開発者コマンドプロンプトからマイグレーションスキーマを作成してデータベースに入れます。しかし、商品オブジェクトを見ると、Partsという辞書オブジェクトがあります。コマンドプロンプトでデータベースが更新されると、そのプロパティはProductテーブルに追加されません。私がしようとしていることが可能かどうかは分かりません。Entity Frameworkコアで外部キーを使用して新しいテーブルを作成する

私はPartsという名前のデータベースにテーブルを追加し、Product表にParts辞書オブジェクトを接続するProductテーブルへの外部キー、および新しいPartsテーブルを追加します。これはEntity Frameworkコアで可能ですか?

public class ShoppingDbContext : IdentityDbContext<User> 
{ 
    public ShoppingDbContext(DbContextOptions options) : base(options) 
    { 
    } 

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) 
    { 
     base.OnConfiguring(optionsBuilder); 
    } 

    public DbSet<Product> Products { get; set; } 
    public DbSet<Order> Orders { get; set; } 
} 

public class Product 
{ 
    public int ProductId { get; set; } 
    public string ProductName { get; set; } 
    public double Price { get; set; } 
    public int CategoryId { get; set; } 
    Dictionary<string, Part> Parts { get; set; } 
} 

答えて

0

リレーションシップは、外部キープロパティの代わりにオブジェクト参照によって追跡されます。このタイプの関連付けはindependent associationと呼ばれます。ここで

詳細:

https://msdn.microsoft.com/en-us/data/jj713564.aspx

サンプルコード:EFコアは現在、直接辞書プロパティをマッピングすることはできません

public partial class Product 
{ 
    public Product() 
    { 
     this.Parts = new HashSet<Part>(); 
    } 

    public int ProductId { get; set; } 
    public string ProductName { get; set; } 
    public double Price { get; set; } 
    public int CategoryId { get; set; } 

    public virtual ICollection<Part> Parts { get; set; } 

} 
+0

でそれを解決し、あなたが私のために私に@LJ –

+0

を取ったことparagrapghを追加することができます –

+0

このdosent wotrkを助けたこと離れ –

1

。製品と部品の関連付けを作成する場合は、それぞれをエンティティとして定義します。次に、それらの間にナビゲーションプロパティを作成することができます - Partからそれが属するProductへの参照、およびProduct on Partsのコレクション。たとえば、

public class Product 
{ 
    public int ProductId { get; set; } 
    public string ProductName { get; set; } 
    public double Price { get; set; } 
    public int CategoryId { get; set; } 
    public ICollection<Part> Parts { get; set; } 
} 

public class Part 
{ 
    public int PartId { get; set; } 
    public int ProductId { get; set; } 
    public Product Product { get; set;} 
} 

また、Partは、ProductエンティティのFKとして機能するプロパティProductIdを定義します。そのプロパティを追加する必要はありません。EFはそれを望まない場合はそれをシミュレートしますが、通常、FKがプロパティにマップされている場合はエンティティを処理する方が簡単です。

0

基本的にArthurが言ったように、EF Coreはそれをまだサポートしていません。

ただし、別の方法では、使用するために実行可能な場合、または必要な場合は複合表を作成することができます。

  // -------------- Defining BrandsOfCategories Entity --------------- // 

     modelBuilder.Entity<BrandCategory>() 
      .HasKey(input => new { input.BrandId, input.CatId }) 
      .HasName("BrandsOfCategories_CompositeKey"); 

     modelBuilder.Entity<BrandCategory>() 
      .Property(input => input.DeletedAt) 
      .IsRequired(false); 

     // -------------- Defining BrandsOfCategories Entity --------------- // 

    public class BrandCategory 
{ 
    public int CatId { get; set; } 
    public int BrandId { get; set; } 
    public DateTime? DeletedAt { get; set; } 
    public Category Category { get; set; } 
    public Brands Brand { get; set; } 
} 

DeletedAtはもちろんのオプションです:

は、ここで簡単な例を示します。これはM-Mの関係を扱います。

0

私は同じ問題を持っていた、私はナビゲーションプロパティのキーワード仮想を除去することにより、およびApplicatinDbContextで

関連する問題