【问题标题】:How can I map all instances of a CLR property type to a column type in EF Core? [duplicate]如何将 CLR 属性类型的所有实例映射到 EF Core 中的列类型? [复制]
【发布时间】:2017-02-08 07:30:15
【问题描述】:

在 EF 6 中,我会在 OnModelCreating 中使用它:

modelBuilder.Properties<DateTime>().Configure(c => c.HasColumnType("date"));

但即使经过大约两个小时的谷歌搜索,我也无法找到 EF Core 替代方案。

可以吗?如果有,怎么做?

【问题讨论】:

  • 看看链接。它不如 EF6 好,必须在发现所有实体类型时在 OnModelCreating 末尾运行。我很确定他们会在未来的某个版本中添加类似于 EF6 的内容。
  • 谢谢@IvanStoev,它很好地回答了我的问题。我们只能希望,随着 EF Core 中约定的大规模改进,他们或某些公共贡献者最终会设计出一种方法来做到这一点,就像在 EF 6 中所做的那样。

标签: entity-framework entity-framework-6 entity-framework-core


【解决方案1】:

您可以像这样在 EF Core 中创建“自定义约定”:

        protected override void OnModelCreating(ModelBuilder builder)
        {
            foreach (var entity in builder.Model.GetEntityTypes())
            {
                foreach (var property in entity.GetProperties())
                {
                    if (property.ClrType == typeof(DateTime))
                    {
                        property.Relational().ColumnType = "date";
                    }
                }
            }
        }

【讨论】:

    【解决方案2】:

    我认为有一些接近您正在寻找的东西,但我找到的示例要求您指定模型和模型属性

    modelBuilder.Entity<Blog>()
        .Property(b => b.Url)
        .ForSqlServerHasColumnType("varchar(200)");
    

    这里是文档和 GitHub 源的链接:

    https://docs.microsoft.com/en-us/ef/core/modeling/relational/data-types

    https://github.com/aspnet/EntityFramework.Docs/blob/master/samples/core/Modeling/FluentAPI/Samples/Relational/DataTypeForProvider.cs

    【讨论】:

    • 谢谢,但我已经知道了。我确实特别问过如何“映射 CLR 属性类型的所有实例”。
    • ...并且在文档页面上提出了相同的问题(没有答案)
    猜你喜欢
    • 1970-01-01
    • 2020-05-03
    • 1970-01-01
    • 1970-01-01
    • 2014-07-31
    • 1970-01-01
    • 2012-09-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多