2010-02-16 52 views
0

我正在首次實施實體框架。我正在處理添加/更新具有父屬性的對象。需要了解實體框架參考狀態

我知道一個實體的父實體被初始化爲「null」。我沒有完全理解如何使用父實體與父實體引用字段,或者需要什麼才能將更改保存到實體。

  1. 我失去了我的分析中任何重要的因素(即EntityState?)
  2. 以下哪些情況是可能的,而且
  3. 什麼,是對付它們的最好方法:

實體:空
的EntityReference:不爲空

實體:不爲空
EntityReferen CE:空

實體:不爲空
的EntityReference:不爲空

感謝您的任何幫助。

代碼示例:

internal void AddUpdateObject(MyDataContext context) 
{ 
// HOW DO I HANDLE THIS SECTION vvvv 
if (this.MyParentEntity == null) 
{ 
    throw new Exception("Parent Property Null."); 
} 
if (this.MyParentEntity.EntityState == EntityState.Detached) 
{ 
    MyParentEntity t = this.MyParentEntity; 
    this.MyParentEntity = null; 
    context.AttachTo("ParentCollection", t); 
    this.MyParentEntity = t; 
} 
// ^^^^^^^^^ 
try 
{ 
    context.AddToMyEntities(this); 
} 
catch (InvalidOperationException) 
{ 
    // the object with the key already exists 
    MyEntity ent = context.MyEntities.First(x => x.id == this.id); 
    PropertyInfo[] props = typeof(MyEntity).GetProperties(); 
    foreach (PropertyInfo pi in props) 
    { 
     if (pi.CanRead && pi.CanWrite && 
      !pi.PropertyType.Name.StartsWith("EntityCollection") && 
      !pi.Name.Equals("id")) 
      pi.SetValue(ent, pi.GetValue(this, null), null); 
    } 
} 
} 
+0

你能澄清你想要做什麼?一個代碼示例會有所幫助。另外:EF 1或EF 4? – 2010-02-16 15:56:36

+0

按要求添加代碼。該函數基本上試圖添加或更新實體。 EF1目前。謝謝。 – Sako73 2010-02-16 16:06:28

回答

0

這是什麼工作:

MyEntity e = context.MyEntities.FirstOrDefault(x => x.id == this.id); 
if(e == null){ 
    MyParent p = this.Parent; 
    this.Parent = null; 
    context.Attach(p); 
    this.Parent = p; 
} 
else 
{ 
    context.ApplyPropertyChanges("MyEntities", this); 
} 

一些參考鏈接:
​​
Adding objects with references to other objects

0

你可以這樣做:

var entity = context.MyEntities.FirstOrDefault(x => x.id == this.id); 
if (entity != null) 
{ 
    // updating 
    // HOW DO I HANDLE THIS SECTION vvvv 
    if (!entity.MyParentEntityReference.IsLoaded) 
    { 
     entity.MyParentEntityReference.Load(); 
    } 
} 
else 
{ 
    // inserting 
    entity = this; 
    context.AddToMyEntities(this); 
    this.ParentEntity = // whatever 
} 
entity.SomeOtherProperty = someValue; 
context.SaveChanges(); 

是否回答你的問題?