2012-02-03 50 views
2

我正在MVC 3中使用实体框架创建一个Web应用程序,并且最近的规范更改已要求我将一个新列添加到其中一个数据库表(记录创建日期)。MVC 3实体框架 - 未填充相应属性的新数据库列

我已经添加了新列,并使用现有记录的值填充它,并在实体框架中更新了模型。当我查看与新列对应的表的对象时,我可以看到这个新数据的属性:但是该属性的数据没有被检索。

只是为了澄清:

  • 我加列“CreatedDate”(日期时间)到餐桌“订单”在我的数据库
  • 我填充值此列对我的现有记录并将其设置为“不空“
  • 我更新的实体框架模型
  • 我的模式‘订单’现在有一个非空的财产‘CreatedDate’
  • 我填充使用LINQ(订单列表”邻在DB.Orders选择o“)
  • 对于我的列表中的任何条目,entry.CreatedDate返回“01/01/0001 00:00:00”,而不是我输入数据库的值。

怎么回事?

+0

您是如何更新模型的?你是否也更新了映射? – 2012-02-03 14:58:02

回答

0

EdmMetadata表?

你在数据库中有EdmMetadata表吗?据我所知,该表包含一个由数据库结构签名的密钥。所以如果这个值没有改变,代码就不会看到改变。好消息是不再需要此表格:

modelBuilder.Conventions.Remove<IncludeMetadataConvention>(); 
+0

在模型浏览器中查看edmx文件时,我通过上下文菜单中的“从数据库更新模型”选项更新了模型。 我可以在模型浏览器上看到“CreatedDate”列,并且映射详细信息显示它已映射到相应的数据库列,并且两者都是日期时间格式,但没有数据正在填充。 我的数据库中没有EdmMetadata表。 – 2012-02-06 09:25:40

+0

对不起,我假设EF代码优先。你是否检查过所有三个生成文件的映射? (ssdl,msl,csdl)。确保通过msl将CreatedDate映射回ssdl。模型浏览器主要关闭csdl,因此可能会在其他人中映射问题。如果我没有记错的话,这些应该生成到edmx的bin中。 – 2012-02-06 10:29:25

+0

想象一下 - 订单记录是由存储过程返回的,而不是LINQ直接导入实体框架的,正如我之前所说的那样。感谢所有帮助我找出从哪里开始寻找的人! – 2012-02-06 10:41:59