仅用于实体类型的实体框架+ Fluent轻量级配置

时间:2016-06-29 14:29:13

标签: c# entity-framework entity-framework-6 fluent

我正在尝试在模型中配置表名,以便每个表都属于使用此代码包含命名空间命名的模式:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    if (modelBuilder == null) throw new ArgumentNullException(nameof(modelBuilder));

    foreach (var creator in ModelCreators)
    {
        creator.OnModelCreating(modelBuilder);
    }
    modelBuilder.Types().Configure(c => c.ToTable(PrefixNamespace(c.ClrType)));
}

private string PrefixNamespace(Type type)
{
    var result = $"{type.Namespace.Split('.').Last()}.{type.Name}";
    return result;
}

问题是应用此配置也会影响ComplexTypes,然后将其配置为实体。如何仅将此配置应用于实体? modelBuilder.Entity<TEntity>(TEntity entity)当时只能配置一个实体,但在构建期间并不知道所有实体类型,有些将从.dll中发现。

我在考虑像

这样的东西
modelBuilder.Types().Where(t => IsNotComplexType(t)).Configure(...)

但我不知道如何实现IsNotComplexType形式的可用对象。

1 个答案:

答案 0 :(得分:0)

我得出的结论是,必须通过DbModelBuilder.ComplexType<TComplexType>()明确设置复杂类型,因此在应用ToTable(string tableName)方法后不会将其转换为实体。

相关问题