context.SaveChanges()没有更新

时间:2012-05-26 15:02:42

标签: c# entity-framework ado.net

所以我在表中添加了一个BIT列,现在我需要确保它由关联的Windows Entity Framework类模块正确处理。

这是我在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);

我有什么遗漏吗?

3 个答案:

答案 0 :(得分:2)

为了更新,您需要在保存更改之前告诉您要更新模型的上下文:

context.Entry(Order_Header).State = EntityState.Modified;
return context.SaveChanges();

答案 1 :(得分:2)

您不应该将代码添加到自动生成的文件中。您需要将其设为部分类,并将所有自定义代码放入另一个文件中。真正的问题虽然听起来像Mark建议的那样,但没有描述描述概念模型到存储模型的映射的元数据。

在Visual Studio中,右键单击.edmx文件并选择“从数据库更新模型”。如果您使用T4模板自定义类,则必须选择模板并选择“运行自定义工具”。

答案 2 :(得分:0)

如果您刚刚手动添加了该属性,则可能没有描述如何将其保存在数据库中的元数据。我没有方便的EF文档,但在Linq to SQL中有一个[Column]属性。我假设EF有类似的东西。