【发布时间】:2010-12-06 10:45:27
【问题描述】:
我已经创建了 POCO 类,它在 edmx 文件中是等价的(只有一种方式导航属性父级的类别实体)
public class Category {
public int ID {get;set;}
public string Name {get;set;}
public Category Parent {get;set;}
}
我对影响父属性的 CRUD 操作有疑问:
检索看起来像:
public void CanRetrieve() {
var category = context.Categories.Where(x => x.ID == id).FirstOrDefault();
cotext.LoadProperty<Category> (category, c => c.Parent);
}
ant 工作正常(我得到了填充了 Parent 属性的 Category 对象)
添加看起来像:
public void CanAdd() {
Category cat = new Category();
cat.Name = "cat 1";
cat.Parent = new Category() {ID = 12}; //assuming that in the database there is a record with ID 12
context.Categories.Attach(cat);
context.SaveChanges();
}
也可以正常工作(在 DB 中出现新记录,Parent_ID 字段设置为 12)
更新:
public void CanUpdate() {
Category cat = new Category();
cat.Name = "cat 1";
cat.Parent = new Category() {ID = 12}; //assuming that in the database there is a record with ID 12
context.Categories.Attach(cat);
//XXX
context.SaveChanges()
}
什么都做。如果我将 //XXX 行替换为以下行:
Context.ObjectStateManager.ChangeObjectState(cat, EntityState.Modified);
Name 属性的值是从源对象更新的(我猜其他标量属性也会如此),但 Parent 被忽略,并且基中的 Parent_ID 字段被保留。
我的问题是:在这种情况下,我如何告诉上下文我希望 Parent 属性值也反映到数据库中,并且可以在不传递 Parent 属性的所有值的情况下完成(只有一个 ID,就像在添加场景中一样)?
最好的问候,
安德烈
【问题讨论】:
标签: c# entity-framework