1

Я хочу создать базу данных с ядром Entity Framework. Я использую командную строку и миграцию для создания базы данных. Но, как вы можете видеть на моей диаграмме, у меня есть отношения «многие ко многим». Как создать эти отношения с моими классами ниже?Создать отношения с Entity Framework Core

enter image description here

Код:

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

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

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

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

    public List<PartCategory> PartCategory { get; set; } 
} 

public class PartCategory 
{ 
    public int PartCategoryId { get; set; } 
    public string Category { get; set; } 

    public List<Part> Parts { get; set; } 
} 

// обновление

public class ProductPartCategory 
{ 
public int ProductId { get; set; } 
public Product Product { get; set; } 

public int PartCategoryId { get; set; } 
public PartCategory PartCategory { get; set; } 
} 

public class Product 
{ 

public int ProductId { get; set; } 
public string ProductName { get; set; } 
public double Price { get; set; } 
public List<PartCategory> PartCategories{ get; set; } 

} 

public class PartCategory 
{ 
public int PartCategoryId { get; set; } 
public string Category { get; set; } 
public List<Product> Products { get; set; } 

//dont mind this propertie its for other stuff 
public List<Part> Parts { get; set; } 
} 
+0

Вы должны прочитать документацию: https://ef.readthedocs.io/en/latest/modeling/relationships.html#many-to-many –

+0

Возможная Дубликат [Как создать отношения многие ко многим с последними ночными сборками EF7?] (http://stackoverflow.com/questions/29442493/how-to-create-a-many-to-many-relationship-with-latest-nightly-builds-of-ef7) – tmg

ответ

0

Вы можете попробовать, как показано ниже, с помощью Fluent API.

Примечание:

Много-ко-многим без класса сущностей, чтобы представлять таблицы соединения пока не поддерживается. Тем не менее, вы можете представлять отношения «много-ко-многим» , включая класс сущности для таблицы соединения и сопоставление двух отдельных отношений «один ко многим».

public class ShoppingDbContext: DbContext 
    { 
     public DbSet<Product> Products { get; set; } 
     public DbSet<PartCategory> PartCategories{ get; set; } 

     protected override void OnModelCreating(ModelBuilder modelBuilder) 
     { 
      modelBuilder.Entity<ProductPartCategory>() 
       .HasKey(t => new { t.ProductId, t.PartCategoryId }); 

      modelBuilder.Entity<ProductPartCategory>() 
       .HasOne(pt => pt.Product) 
       .WithMany(p => p.ProductPartCategories) 
       .HasForeignKey(pt => pt.ProductId); 

      modelBuilder.Entity<ProductPartCategory>() 
       .HasOne(pt => pt.PartCategory) 
       .WithMany(t => t.ProductPartCategories) 
       .HasForeignKey(pt => pt.PartCategoryId); 
     } 
    } 

Ваших модель должна быть такая:

public class Product 
    { 

    public int ProductId { get; set; } 
    public string ProductName { get; set; } 
    public double Price { get; set; } 
    public List<ProductPartCategory> ProductPartCategories { get; set; } 

    } 

public class PartCategory 
    { 
    public int PartCategoryId { get; set; } 
    public string Category { get; set; } 
    public List<ProductPartCategory> ProductPartCategories { get; set; } 
    } 

    public class ProductPartCategory 
    { 
     public int ProductId { get; set; } 
     public Product Product { get; set; } 

     public int PartCategoryId { get; set; } 
     public PartCategory PartCategory { get; set; } 
    } 
+0

Я использовал ваш код. Но получите это сообщение об ошибке, когда я запустил веб-приложение .... вы можете найти ссылку (https://gyazo.com/cb7df90ddc75c31db451a5cb17e2acf0) –

+0

ваш код не мой one.try мой code.as, показанный выше. 'ModelBuilder.Entity () .HasOne (пт => pt.Product) .WithMany (р => p.PartCategories) .HasForeignKey (пт => pt.ProductId);' – Sampath

+0

использовать точный код, который я дали.включение классов моделей. Вы должны изменить свои, как мой код. – Sampath

0

Вы уже получили ответы на некоторые вопросы, но вот как вы можете найти для себя ...

То, как я отвечаю на все мои вопросы моделирования EF, заключается в том, чтобы ретранслятор dotnet менял структуру данных для меня. Выполняя команду scaffolding в командной строке (изнутри каталога файлов проектов), dotnet создаст кучу файлов, которые затем можно использовать непосредственно или проверить для структуры и удалить по своему усмотрению.

Единственный способ, которым это будет работать, - это установить все ваши отношения (внешние ключи и т. Д.), Установленные в вашей базе данных разработки.

dotnet ef dbcontext scaffold "YourConnectionString" Microsoft.EntityFrameworkCore.SqlServer -a -t PartCategory -t Products -t ProducsPartCategory --o OutputDirectory 
Смежные вопросы