[英]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.