当使用EF 4.1代码优先时,是否有可能创建用户定义的数据类型?
本文关键字:创建 有可能 是否 用户 定义 数据类型 EF 代码 | 更新日期: 2023-09-27 18:14:14
当使用EF 4.1 Code First时,是否可以为您的模式创建用户定义的数据类型?
简单的回答是否定的。
长答:
当前的EF实现在尝试使用用户定义类型时会导致多个问题:
- 该类型必须在表的DDL定义中使用之前定义。因此,不能在数据库初始化器的
Seed
方法中定义类型(通常用于其他数据库结构,如触发器或索引)。要做到这一点,您必须通过实现IDatabaseInitializer
来创建全新的初始化器,并将数据库创建和表创建分开,因为自定义类型定义必须在它们之间。下面是一些如何创建数据库初始化器的示例(每次运行应用程序时都会重新创建表)。 - 创建反映草图模型变化的数据库初始化器更复杂,因为这个逻辑可能是EF内部的
- 您还必须添加检查类型是否已创建
- 即使你有初始化器,你仍然面临最大的障碍。EF还没有准备好允许您为列定义用户定义的类型——fluent API中的
ColumnAttribute
和HasColumnType
都不接受自定义类型。因此,映射必须指定基本的基本SQL类型,这些自定义类型将在EF生成的表DDL中使用。因此,除非自定义数据库初始化器对这些生成的SQL脚本进行后处理,并用自定义类型替换基本类型(非常丑陋的解决方案),否则表将不会使用它们。