问题描述
使用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
列未更新,老实说,我不知道为什么这样做。我可能在这里缺少真正的基本知识,但似乎找不到。
我真的很感谢在那方面的一些帮助。
提前感谢您的帮助!
编辑:
解决方法
所以我找到了问题。 @Gert Arnold有点帮助我找到了它。
在我的数据库模型的EDMX文件中,StoreGeneratedPattern
列的Deleted
属性设置为“ Computed”。
我将其更改为“无”,这使其按预期工作。
感谢您的帮助!