【问题标题】:Entity Framework + Fluent Lightweight configuration for entity types onlyEntity Framework + Fluent Lightweight 配置仅适用于实体类型
【发布时间】:2016-06-29 14:29:12
【问题描述】:

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

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 表单可用对象。

【问题讨论】:

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


    【解决方案1】:

    我得出的结论是复杂类型必须通过DbModelBuilder.ComplexType<TComplexType>()显式设置,所以在应用ToTable(string tableName)方法后它不会变成实体。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-14
      • 1970-01-01
      • 2015-05-11
      • 1970-01-01
      • 2013-01-09
      • 2019-05-12
      相关资源
      最近更新 更多