0

所以我在表中添加了一个 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);

有什么我想念的吗?

4

3 回答 3

2

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

context.Entry(Order_Header).State = EntityState.Modified;
return context.SaveChanges();
于 2012-05-26T15:15:58.093 回答
2

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

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

于 2012-05-26T17:09:59.823 回答
0

如果您只是手动添加属性,它可能没有描述如何将其保存在数据库中的元数据。我手边没有 EF 文档,但在 Linq to SQL 中有一个[Column]属性。我认为EF有类似的东西。

于 2012-05-26T15:19:48.093 回答