微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

对Entity Framework 6中特定列的更新不起作用

如何解决对Entity Framework 6中特定列的更新不起作用

使用Entity Framework 6更新数据库中的特定列时遇到问题。

首先,让我澄清一下情况:我正在使用ASP.NET-webforms构建网站,其背后的代码是用C#编写的。作为ORM工具,我使用数据库优先方法实现了EF6。该网站应该有助于组织项目。

我在数据库上最重要的表是project表,每个项目的基本数据都存储在该表中。 EF6中与表对应的类如下:

public partial class Project
{
    public Project()
    {
        this.ProjectRessource = new HashSet<ProjectRessource>();
        this.ProjectTeam = new HashSet<ProjectTeam>();
    }

    public int ProjectID { get; set; }
    public string Name { get; set; }
    public Nullable<int> ManagerID { get; set; }
    public string Goal { get; set; }
    public Nullable<int> PhaseID { get; set; }
    public Nullable<System.DateTime> StartDate { get; set; }
    public Nullable<System.DateTime> EndDate { get; set; }
    public Nullable<int> PriorityID { get; set; }
    public Nullable<decimal> Progress { get; set; }
    public string Comment { get; set; }
    public string Decisions { get; set; }
    public string File { get; set; }
    public Nullable<int> StatusID { get; set; }
    public Nullable<int> PlannedDays { get; set; }
    public Nullable<int> Plannedcost { get; set; }
    public Nullable<short> PlannedYear { get; set; }
    public bool Deleted { get; set; }

    public virtual Status Status { get; set; }
    public virtual Phase Phase { get; set; }
    public virtual Priority Priority { get; set; }
    public virtual Employee Employee { get; set; }
    public virtual ICollection<ProjectRessource> ProjectRessource { get; set; }
    public virtual ICollection<ProjectTeam> ProjectTeam { get; set; }
}

显然有更多的表格,但我认为它们对我的问题无关紧要。

在我的网站上,我有一个窗体视图来显示用户选择的各个项目的数据。

要连接formview和请求的数据,我使用的是ObjectDataSource,它已连接到DAL中的不同查询方法

用户想要删除项目时,我的窗体视图中有一个带有CommandName“ Delete”的按钮,该按钮触发了连接到窗体视图的ObjectDataSource的DeleteMethod。到目前为止,一切工作都非常完美,符合预期。 事实是,我真的不想删除记录,但是我想将属性“ Deleted”(请参见上面的Project-class)设置为true。在数据库方面,此列的数据类型为“ bit”,认值为“ 0”或“ false”,并且设置为不可为空。

因此,当调用DeleteMethod时,我基本上想更新用户正在处理的实体。

问题是我无法在Deleted列上正确执行该更新。

方法如下:

public void DeleteProject(Project project)
{
        project.Deleted = true;

        context.Project.Attach(project);
        context.Entry(project).State = EntityState.Modified;
        context.SaveChanges();
}

“上下文”是我的数据库上下文。

调用方法后,我正在检查数据库,但“已删除”字段仍设置为“ 0”。否则(将标记为“已删除= true”的项目设置为“已删除=假”)也无法正常工作。

我已经检查了其他属性。例如,如果我将代码更改为以下内容

public void DeleteProject(Project project)
{
        Project pro1 = new Project
        {
            ProjectID = project.ProjectID,Name = "68",Deleted = false,Goal = "68",ManagerID = 8,Plannedcost = 68,PlannedYear = 2015,StartDate = DateTime.Now,EndDate = DateTime.Now,PhaseID = 1,PriorityID = 1,Progress = 0,Comment = "68",Decisions = "68",File = "68",PlannedDays = 68
        };

        context.Project.Attach(pro1);
        context.Entry(pro1).State = EntityState.Modified;
        context.SaveChanges();
}

从字面上看,数据库表中的所有其他列均已更新,但Deleted列未更新,老实说,我不知道为什么这样做。我可能在这里缺少真正的基本知识,但似乎找不到。

我真的很感谢在那方面的一些帮助。

如果您需要有关我的代码中更多信息的信息,请在下面留下评论

提前感谢您的帮助!

编辑:

我的数据库是MS sql Server 2016。

解决方法

所以我找到了问题。 @Gert Arnold有点帮助我找到了它。 在我的数据库模型的EDMX文件中,StoreGeneratedPattern列的Deleted属性设置为“ Computed”。 我将其更改为“无”,这使其按预期工作。

感谢您的帮助!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。