我有一个DbContext和BaseEntity。
这些类在我创建的nuget包中,我将nuget包引用到我的解决方案的项目中。
在DbContext中,通常有一个OnModelConfiguring
方法。我想将我的实体类的Map
方法定义为在OnModelConfiguring
中作为流畅的api运行。
//在nuget包
中public class DataContext : DbContext
{
public DataContext()
{
Database.Connection.ConnectionString = Parameters.ConnectionString;
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
// Is there some code something like this to do what i want ?
// I can't get assembly that has Entity Classes
/*
foreach (var assemblyName in Assembly.GetEntryAssembly().GetReferencedAssemblies())
{
var entityTypes = Assembly.LoadFrom(assemblyName.FullName)
.GetTypes()
.Where(t => t.IsSubclassOf(typeof(BaseEntity)))
.ToList();
foreach (var entity in entityTypes)
{
entity.GetMethod("Map").Invoke(entity, new[] { modelBuilder });
}
}
*/
}
}
//在nuget包
中public abstract class BaseEntity : IEntity
{
protected BaseEntity()
{
}
public abstract void Map(DbModelBuilder modelBuilder);
}
//在我的解决方案中是一个项目
public class Conversation : BaseEntity
{
public override void Map(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Conversation>().ToTable("Conversation");
modelBuilder.Entity<Conversation>().HasKey(x => x.Id);
modelBuilder.Entity<Conversation>().Property(x => x.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
modelBuilder.Entity<Conversation>().Property(x => x.AutoId).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
}
}