context.SaveChanges()没有更新
问题描述:
所以我在表中添加了一个BIT列,现在我需要确保它被相关的Windows实体框架类模块正确处理。context.SaveChanges()没有更新
这是我在Order_Header.cs补充说:
//New added column...
public virtual bool REPORT_UPLOADED
{
get;
set;
}
但文件看起来就像是自动生成的一些工具......如果是哪个?我是否应该重新运行该新工具以考虑新列?无论如何。
现在我的类模块,实现了保存,更新,选择等功能实体中去:
public override int Save(Entities.Master.Order_Header type)
{
try
{
using (var context = new Master_Data_Container(ConfigurationManager.MasterDataConnection()))
{
context.Order_Header.AddObject(type);
return context.SaveChanges();
}
}
catch (Exception ex)
{
throw ex;
}
}
public override int Update(Entities.Master.Order_Header type)
{
try
{
using (var context = new Master_Data_Container(ConfigurationManager.MasterDataConnection()))
{
var orderHeader = context.Order_Header.First(n => n.ID == type.ID);
orderHeader.ADR_FACT = type.ADR_FACT;
orderHeader.ADR_RAPPORT = type.ADR_RAPPORT;
orderHeader.REPORT_UPLOADED = type.REPORT_UPLOADED;
orderHeader.STATUT = type.STATUT;
orderHeader.TELEPHONE = type.TELEPHONE;
orderHeader.TYPE_COMMANDE = type.TYPE_COMMANDE;
orderHeader.TYPE_EXAMEN = type.TYPE_EXAMEN;
return context.SaveChanges();
}
}
catch (Exception ex)
{
throw ex;
}
}
我不是很熟悉的实体框架,所以我尝试模仿了已经为我在这个项目中工作正常的另一个实体完成。
更新似乎工作正常,除了REPORT_UPLOADED从不更新。一个SQL事件探查器跟踪显示新的属性/列被忽略:(
orderHeader.REPORT_UPLOADED = true;
orderHeader.POSTE = "WHATEVER";
int result = new MsDt_OrderHeader().Update(orderHeader);
有什么我失踪?
答
您不应该将代码添加到自动生成的文件。您需要将其设置为部分类并将所有自定义代码放入另一个文件中。虽然听起来像Mark所说的那样是一个真正的问题,但更新了描述概念模型到存储模型的映射的元数据。
在Visual Studio中,右键单击.edmx文件并选择“从数据库更新模型”。如果您使用T4模板来自定义类,则必须选择模板并选择“运行自定义工具”。
答
为了更新你需要告诉你是上下文在保存更改之前要更新模型:
context.Entry(Order_Header).State = EntityState.Modified;
return context.SaveChanges();
答
如果你只是手动添加的属性,它可能没有描述如何将它保存在数据库中的元数据,我没有EF文档方便,但在Linq to SQL中有[Column]
属性,我假设EF有类似的东西。
没错。结束这样做,现在一切都好了。谢谢。 –