繁体   English   中英

实体框架 6 中特定列的更新不起作用

[英]Update on specific column in Entity Framework 6 not working

我在使用 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; }
}

显然有更多的桌子,但我认为它们对我的问题并不重要。

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

为了连接表单视图和请求的数据,我使用了一个 ObjectDataSource,它连接到我的 DAL 中的不同查询方法。

当用户想要删除一个项目时,我的表单视图中有一个带有 CommandName“Delete”的按钮,它会触发连接到表单视图的 ObjectDataSource 的 DeleteMethod。 到目前为止,一切都按预期完美运行。 问题是,我真的不想删除记录,但我想将属性“已删除”(参见上面的项目类)设置为 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”。 否则(将标记为“Deleted = true”的项目设置为“Deleted = false”)也不起作用。

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

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 文件中, Deleted列的StoreGeneratedPattern属性设置为“Computed”。 我将其更改为“无”,使其按预期工作。

谢谢您的帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM