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

时间:2011-11-10 23:06:33

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

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

1 个答案:

答案 0 :(得分:1)

简单的答案是否定的。

更长的答案:

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

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