0

У меня есть DbContext, который я через командную строку разработчика и создаю схему миграции в мою базу данных. Но если вы посмотрите на объект продукта, у меня есть словарь-объект с именем Parts. Это свойство не добавляется в таблицу Product, когда база данных обновляется в командной строке. Я даже не знаю, возможно ли, что я пытаюсь сделать.Создание новой таблицы с внешним ключом с Entity Framework Core

Я хочу, чтобы добавить таблицу в базе данных с именем Parts, а затем добавить внешний ключ к таблице Product, которая соединяет объект Parts словаря в Product таблицы, и новый Parts стола. Возможно ли это с Entity Framework Core?

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

Пример кода:

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

Вы можете добавить, что paragrapgh вы забирали –

+0

Это помогло мне @LJ –

+0

Это wotrk для доцент меня –

1

EF Ядро не может в настоящее время на карте словарь напрямую. Если вы хотите создать связь между Продуктами и частями, определите каждую из них как сущность. Затем вы можете создавать свойства навигации между ними - ссылку от Части к Продукту, которой она принадлежит, и набор частей на Продукт. Например:

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

Часть также определяет свойство ProductId, которое действует как FK для объекта Product. Вам не нужно добавлять это свойство - EF будет имитировать его для вас, если вы этого не хотите, но обычно проще иметь дело с объектами, если FK сопоставляется с свойством.

0

В принципе, как сказал Артур, 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

Смежные вопросы