I have created the POCO class and it's equivalent in edmx file (Category entity with only one way navigation property Parent)
public class Category {
public int ID {get;set;}
public string Name {get;set;}
public Category Parent {get;set;}
}
And I have an issue with CRUD operations affecting Parent property:
Retrieve looks like:
public void CanRetrieve() {
var category = context.Categories.Where(x => x.ID == id).FirstOrDefault();
cotext.LoadProperty<Category> (category, c => c.Parent);
}
ant is working fine (i get Category object with Parent property filled)
Add looks like:
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();
}
Is also working fine (in the DB new record appears with Parent_ID field set to 12)
And Update:
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()
}
does anything. If I replace the //XXX line with the following line:
Context.ObjectStateManager.ChangeObjectState(cat, EntityState.Modified);
the value of Name property is updated form the source object (I guess other scalar properties would also be) but the Parent is ignored and the Parent_ID field in the base is preserved.
My question is: How in this scenario can I tell the context I want the Parent property value also reflected to the database and can it be done without passing all the values of Parent property (only an ID, just like in Adding scenario)?
Best regards,
Andrzej