gpt4 book ai didi

c# - 如何在 Entity Framework 上下文类中创建的模型上动态更改列名

转载 作者:太空狗 更新时间:2023-10-30 00:38:12 26 4
gpt4 key购买 nike

我有一个这样的基类:

public class BaseClass : IEditableObject {

public BaseClass() {

}

public Guid Id { get; set; }

public void BeginEdit() {

}
public void CancelEdit() {

}
public void EndEdit() {

}
}

我有 2 个这样的派生类:

public class User : BaseClass {

[Column( "UserFirstName" )]
public string FirstName {
get;
set;
}

[Column( "UserLastName" )]
public string LastName {
get;
set;
}
}

public class School : BaseClass {
[Column( "SchoolName" )]
public string Name {
get;
set;
}
}

我正在使用 Entity Framework Code-First 并在我的上下文类中配置这些类:

public class MyContext : DbContext {

public MyContext() : base() {
Database.SetInitializer( new MigrateDatabaseToLatestVersion<MyContext, Configuration>() );
}

public DbSet<User> Users { get; set; }

public DbSet<School> Schools { get; set; }

protected override void OnModelCreating( DbModelBuilder modelBuilder ) {
base.OnModelCreating( modelBuilder );
}

}

当我运行程序数据库并创建表时,但主键列名称是每个表的 Id。我希望列名称为 UserIdSchoolId

因此我必须在创建模型时配置实体以使用 TableNameId 更改列名

我也能胜任这份工作:

modelBuilder.Entity<User>().Property( i => i.Id ).HasColumnName( "UserId" );
modelBuilder.Entity<School>().Property( i => i.Id ).HasColumnName( "SchoolId" );

假设我有数百个类,我会为每个实体一个一个地进行配置,所以这是一个巨大的时间浪费。

我如何使用迭代或其他我不知道的东西动态地完成这项工作?

最佳答案

您可以使用 DbModelBuilder.Types<T> 在所有 BaseClass 上应用自定义约定的方法派生实体:

modelBuilder.Types<BaseClass>().Configure(c => 
c.Property(e => e.Id).HasColumnName(c.ClrType.Name + "Id")
);

关于c# - 如何在 Entity Framework 上下文类中创建的模型上动态更改列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43762053/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com