0

Ich habe eine DbContext die ich über die Entwickler-Eingabeaufforderung und erstellen ein Migrationsschema in meine Datenbank ein. Aber wenn Sie das Produktobjekt betrachten, habe ich ein Wörterbuchobjekt mit dem Namen Parts. Diese Eigenschaft wird nicht zur Tabelle hinzugefügt, wenn die Datenbank in der Eingabeaufforderung aktualisiert wird. Ich weiß nicht einmal, ob es möglich ist, was ich zu tun versuche.Erstellen einer neuen Tabelle mit Fremdschlüssel mit Entity Framework Core

Ich mag eine Tabelle in der Datenbank Parts Namen hinzufügen und dann einen Fremdschlüssel für die Product Tabelle hinzuzufügen, die das Parts Dictionary-Objekt in der Product Tabelle verbindet, und die die neue Parts Tabelle. Ist das mit Entity Framework Core möglich?

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; } 
} 

Antwort

0

Beziehungen werden durch Objektverweise anstelle von Fremdschlüsseleigenschaften verfolgt. Diese Art der Assoziation wird independent association genannt.

Details hier:

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

Beispielcode:

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

Können Sie fügen hinzu, dass paragrapgh Sie nahm –

+0

Das hat mich –

+0

für mich Diese dosent wotrk @LJ geholfen –

1

EF-Core kann zur Zeit kein Wörterbuch Eigenschaft direkt abzubilden. Wenn Sie eine Verknüpfung zwischen Produkten und Teilen erstellen möchten, definieren Sie jede davon als Entität. Sie können dann Navigationseigenschaften zwischen ihnen erstellen - eine Referenz von Part auf das Produkt, zu dem es gehört, und eine Sammlung von Parts on Product. Beispiel:

Teil definiert auch eine Eigenschaft ProductId, die als die FK für die Produkteinheit fungiert. Sie müssen diese Eigenschaft nicht hinzufügen - EF simuliert es für Sie, wenn Sie es nicht möchten, aber normalerweise ist es einfacher, mit Entitäten umzugehen, wenn der FK einer Eigenschaft zugeordnet ist.

0

Grundsätzlich, wie Arthur sagte, EF Core unterstützt es noch nicht.

Eine andere Möglichkeit besteht jedoch darin, eine zusammengesetzte Tabelle zu erstellen, wenn Sie möchten oder wenn es für Ihre Verwendung geeignet ist.

Hier ist ein einfaches Beispiel:

  // -------------- 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; } 
} 

Die DeletedAt ist natürlich optional. Dies behandelt M-M-Beziehungen.

0

hatte ich das gleiche Problem, ich beschlossen, es durch das Schlüsselwort virtual auf den Navigationseigenschaften und mit in der ApplicatinDbContext Entfernen

Verwandte Themen