【问题标题】:HasOne with OneToMany mapping relationshipHasOne 与 OneToMany 的映射关系
【发布时间】:2019-10-09 21:06:23
【问题描述】:
public class Car
{
    public int Id { get; set; }
    public string Name { get; set; }
    public Owner Owner { get; set; }
}

public class Owner
{
   public int Id { get; set; }
   public string Name { get; set; }
   public IEnumerable<Country> VisitedCountries { get; set; }
}

public class Country
{
   public int Id { get; set; }
   public string Name { get; set; 
   public Owner Owner { get; set; }       
}

我将这种关系映射为

public class CarConfiguration : IEntityTypeConfiguration<Car>
{
   public void Configure(EntityTypeBuilder<Car> builder)
   {
       builder.ToTable("Car");
       builder.HasKey(x => x.Id);
       builder.Property(x => x.Id).HasColumnName("Id").ValueGeneratedOnAdd();
       builder.HasOne(x => x.Owner);
   }
}

目前,我将 OwnerConfiguration 文件添加为单独的配置文件

public void Configure(EntityTypeBuilder<Owner> builder)
{
     builder.ToTable("Owner");
     builder.HasMany(x => x.VisitedCountries);
     ...
}

我的问题是:如何重构它并仅在地图上使用 配置文件(例如 CarConfiguration)并删除 所有者配置文件?

【问题讨论】:

  • 您可以在 DbContex 的 OnConfiguring 覆盖中配置所有实体。

标签: c# .net entity-framework asp.net-core


【解决方案1】:

对于IEntityTypeConfiguration,它允许将实体类型的配置分解为单独的类,并且您不能将其用于不同的模型。

一般来说,配置模型有两种方式,IEntityTypeConfiguration在单独的文件中和直接在OnModelCreating中配置。

在机型较多的地方,建议使用IEntityTypeConfiguration进行单独配置,方便配置。如果你只是想避免配置modelBuilder.ApplyConfiguration(new CarConfiguration());,你可以试试modelBuilder.ApplyEntityTypeConfigurations(Assembly.GetExecutingAssembly());

如果你想有一个地方配置,你可以关注OnModelCreatinglike

    protected override void OnModelCreating(ModelBuilder builder)
    {
            base.OnModelCreating(builder);
            builder.Entity<Car>(c =>
            {
            c.ToTable("Car");
            c.HasKey(x => x.Id);
            c.Property(x => x.Id).HasColumnName("Id").ValueGeneratedOnAdd();
            c.HasOne(x => x.Owner);
            });
    }

【讨论】:

    猜你喜欢
    • 2012-02-08
    • 2013-11-20
    • 2020-04-15
    • 1970-01-01
    • 2019-09-23
    • 1970-01-01
    • 2011-06-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多