是否可以将实体的ModelBuilders放在不同的文件中?我们正试图将自动脚手架和数据库分开,并有一定的手动定制。
这是我正在尝试的,收到的错误如下。
文件1:《中国国家地理》,文件2:《中国国家地理》,文件3:《中国国家地理》,文件4:《中国国家地理》,文件5:《中国国家地理》,文件6:《中国国家地理》,文件7:《中国国家地理》,文件8:《中国国家地理》,文件9:《中国国家地理》,文件10:《中国国家地理》,文件10:《中国国家地理》,文件11:《中国国家地理》,文件11:《中国国家地理》,文件11:《中国国家地理》,文件11:《中国国家地理》,文件11:《中国国家地理》,文件11:《中国国家地理》,文件11:《中国国家地理》,文件11:《中国国家地理》,文件11:《中国国家地理》,文件11:《中国国家地理》,文件11:《中国国家地理》,文件11:《中国国家地理》,文件11:《中国国家地理》,文件11:《中国国家地理》,文件11:《中国国家地理》。
modelBuilder.Entity<PropertyMailingAddress>(entity =>
{
entity.HasOne(d => d.LkAddressType)
.WithMany(p => p.PropertyMailingAddress)
.HasForeignKey(d => d.LkAddressTypeId)
.HasConstraintName("FK_PropertyMailingAddress_LK_AddressTypeId");
文件2:
modelBuilder.Entity<PropertyMailingAddress>(entity =>
{
entity.HasOne(d => d.LkSourceOfAddress)
.WithMany(p => p.PropertyMailingAddress)
.HasForeignKey(d => d.LkSourceOfAddressId)
.HasConstraintName("FK_PropertyMailingAddress_LK_SourceOfAddressId");
CS1501 Error CS1501 "Entity "方法没有重载,需要两个参数。
能否有部分类的方法论?
如果你想让每个实体都有一个文件,那么,不要使用模型生成器,而使用 IEntityTypeConfiguration
. 创建一个类,实现 IEntityTypeConfiguration<T>
每个实体。例如
public class PropertyMailingAddressConfig : IEntityTypeConfiguration<PropertyMailingAddress>
{
public void Configure(EntityTypeBuilder<PropertyMailingAddress> builder)
{
builder
.HasOne(d => d.LkAddressType);
.WithMany(p => p.PropertyMailingAddress);
.HasForeignKey(d => d.LkAddressTypeId)
.HasConstraintName("FK_PropertyMailingAddress_LK_AddressTypeId");
}
}
默认的约定也是一样的,所以一个叫Id的属性会自动被映射为主键,等等,然后你需要告诉Entity Framework从给定的文件中加载实体配置。
然后您需要告诉 Entity Framework 从给定的文件中加载实体配置。Assembly
:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder
.ApplyConfigurationsFromAssembly(Assembly.GetExecutingAssembly());
}
你可以通过设置dbcontext类为 partial
在两个文件中创建部分类,然后在其中一个文件中定义一个方法来传递 ModelBuilder
的参数。
详情请参考以下内容。
File1:文件。
public partial class MyDbContext: DbContext
{
public DbContext(DbContextOptions<MyDbContext> options)
: base(options)
{
}
public DbSet<PropertyMailingAddress> PropertyMailingAddress{ get; set; }
partial void OnModelCreatingPartial(ModelBuilder modelBuilder);
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
OnModelCreatingPartial(modelBuilder);
modelBuilder.Entity<PropertyMailingAddress>(entity =>
{
entity.HasOne(d => d.LkAddressType)
.WithMany(p => p.PropertyMailingAddress)
.HasForeignKey(d => d.LkAddressTypeId)
.HasConstraintName("FK_PropertyMailingAddress_LK_AddressTypeId");
});
}
}
File2:
public partial class MyDbContext : DbContext
{
partial void OnModelCreatingPartial(ModelBuilder modelBuilder)
{
modelBuilder.Entity<PropertyMailingAddress>(entity =>
{
entity.HasOne(d => d.LkSourceOfAddress)
.WithMany(p => p.PropertyMailingAddress)
.HasForeignKey(d => d.LkSourceOfAddressId)
.HasConstraintName("FK_PropertyMailingAddress_LK_SourceOfAddressId");
});
}
}
你可以参考 这个.
我真的不知道为什么你要为一个实体建立单独的配置文件。然而,根据你提供的内容,你可以这样做。
public partial static class MyExtensions
{
public static void ConfigureMyEntity(this ModelBuilder modelBuilder)
{
modelBuilder.Entity<MyEntity>()
.HasOne<Other>()
.WithMany()
....
}
}
如果你想为不同的实体定义配置,有更简单的方法来实现。