2011-04-04 73 views
2

我正在处理自定义实体框架提供程序,并且需要为此提供程序添加对默认列值的支持。当用户使用实体框架向导并选择一个包含具有默认值的列的表时,这些默认值不会被填充到实体设计器中。支持自定义实体框架提供程序中的默认列值

我有点迷失在这个人口应该发生的地方。我相信适当的地方将在DbXmlEnabledProviderManifest的GetEdmType方法覆盖,但我不明白如何设置默认值,如果这是正确的地方。

有人有写EF表提供支持表列默认值的EF提供者的经验吗?你如何实现这个?

回答

0

我对晚会有点迟,但DbXmlEnabledProviderManifest不适合添加默认值。提供程序清单描述了数据库引擎本身的功能,并且对于此数据库引擎而言是特定的(并且是通用的),而不是针对给定的数据库和/或表。提供者清单中的默认值告诉EF如果用户没有提供给定列属性将使用什么值(例如,如果用户用户未指定小数列的比例或精度,则来自提供者清单的值将会用于此栏的比例和/或精度)。 如果您只想为属性插入默认值,最简单的方法是将与实体中列对应的属性设置为构造函数中的该值。通过这种方式,用户可以始终将其设置为不同的值,但是如果他/她没有将默认值发送到数据库。对于某些情况下,数据库中的某些列没有实体的相应属性,可以在SSDL中的Property元素上使用DefaultValue属性,这会在添加行时插入到数据库中。如果这些属性不是空的,这是特别有用的,因为没有告诉EF应该插入什么值,EF会尝试插入null,这对于不可为空的列显然会失败。