当使用EF 4.1代码优先时,是否有可能创建用户定义的数据类型?

本文关键字:创建 有可能 是否 用户 定义 数据类型 EF 代码 | 更新日期: 2023-09-27 18:14:14

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

当使用EF 4.1代码优先时,是否有可能创建用户定义的数据类型?

简单的回答是否定的。

长答:

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

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