【发布时间】:2012-10-10 21:31:09
【问题描述】:
我有一个实体框架数据库的第一个项目。这是模型的提取:
public partial class LedProject
{
public LedProject()
{
this.References = new HashSet<LedProjectReference>();
this.Results = new HashSet<LedProjectResult>();
this.History = new HashSet<LedProjectHistory>();
}
public string Identifier { get; set; }
public string Name { get; set; }
public Nullable<System.DateTime> CompletionDate { get; set; }
public System.DateTime CreationDate { get; set; }
public System.Guid ProjectId { get; set; }
public string Comment { get; set; }
public virtual User ContactUser { get; set; }
public virtual User CreationUser { get; set; }
public virtual Customer Customer { get; set; }
public virtual LedProjectAccounting Accounting { get; set; }
public virtual LedProjectState State { get; set; }
public virtual ICollection<LedProjectReference> References { get; set; }
public virtual ICollection<LedProjectResult> Results { get; set; }
public virtual User ResponsibleUser { get; set; }
public virtual ICollection<LedProjectHistory> History { get; set; }
}
public partial class User
{
public System.Guid UserId { get; set; }
public string LoginName { get; set; }
public System.DateTime CreationDate { get; set; }
public string Firstname { get; set; }
public string Lastname { get; set; }
public string Email { get; set; }
}
我在设置LedProject 类的导航项ResponsibleUser 时遇到问题。当我将ResponsibleUser 设置为另一个用户并随后保存DBContext 的更改时,更改将存储在数据库中。
但是,当我想通过将导航属性设置为 null 来删除 LedProject 的当前 ResponsibleUser 时。更改不会存储在数据库中。
LedProject project = db.LedProject.Find(projectId);
project.Name = string.IsNullOrEmpty(name) ? null : name;
...
project.ResponsibleUser = responsibleUser == null ? null : db.User.Find(responsibleUser.UserId);
...
db.SaveChanges();
删除导航属性有什么技巧吗?
【问题讨论】:
-
当您设置
project.ResponsibleUser时,您确定responsibleUser实际上为空吗?声明不在此处。如果将整行替换为project.ResponsibleUser = null;,它会清除导航吗? -
当我将行更改为 project.ResponsibleUser = null; 时,它仍然不会删除该属性。在调试模式下,我看到该属性设置为 null,但它不是由方法 SaveChanges() 存储的
-
数据库列是否可以为空? ID 列的映射是否设置为允许空值?我经常看到声明为
Nullable<User>的属性,而 null 实际上是它们的合法值。但我没有大量工作 EF 实践,所以如果不是这样,我就没有想法了。 -
数据库列可以为空。舒尔可以在这个属性中存储一个空值,因为我可以在没有 ResponibleUser 的情况下创建一个新的 LedProject。
-
那我没主意了。祝你好运。
标签: c# entity-framework