如何在OnModelConfiguring中定义我的类'方法

时间:2017-09-04 12:30:47

标签: c# entity-framework unit-of-work ef-fluent-api

我有一个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);
    }
}

0 个答案:

没有答案