【问题标题】:Is it possible to create User-Defined Data Types when using EF 4.1 Code First?使用 EF 4.1 Code First 时是否可以创建用户定义的数据类型?
【发布时间】:2011-11-16 05:48:30
【问题描述】:

使用 EF 4.1 Code First 时,是否可以为您的架构创建用户定义的数据类型?

【问题讨论】:

  • 是的,可以阅读这篇文章[在运行时修改实体框架模型][1] [1]:stackoverflow.com/questions/4019895/…
  • @DeveloperX 这个问题是关于用户定义的字段而不是用户定义的数据类型。

标签: c# .net entity-framework-4.1 ef-code-first sql-server-2008-r2


【解决方案1】:

简单的答案是否定的。

更长的答案:

当前的 EF 实现在尝试使用用户定义的类型时会导致多个问题:

  • 必须先定义类型,然后再将其用于表的 DDL 定义中。因此,无法在数据库初始化程序的Seed 方法中定义该类型(通常用于触发器或索引等其他数据库结构)。要完成这项工作,您必须通过实现IDatabaseInitializer 来创建全新的初始化程序,并将数据库创建和表创建分开,因为自定义类型定义必须在它们之间。 Here 是一些如何创建数据库初始化程序的示例(每次运行应用程序时都会重新创建表)。
  • 创建反映模型更改的数据库初始化程序更加复杂,因为此逻辑可能是 EF 内部的
  • 您还必须添加检查类型是否尚未创建
  • 即使您有初始化程序,您仍然面临最大的障碍。 EF 尚未准备好允许您为列定义用户定义类型 - 流式 API 中的 ColumnAttributeHasColumnType 都不会接受自定义类型。因此,您的映射必须指定基本的原始 SQL 类型,并且这些自定义类型将在 EF 生成的表 DDL 中使用。因此,除非自定义数据库初始化程序对生成的 SQL 脚本进行后处理并用自定义类型替换基本类型(非常丑陋的解决方案),否则表将不会使用它们。

【讨论】:

    猜你喜欢
    • 2011-11-03
    • 1970-01-01
    • 2019-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多