2010-10-02 66 views
1

我的特殊應用程序是一個使用實體框架的ASP.NET MVC應用程序。ASP.NET MVC/EF:我應該如何處理新實體的導航屬性?

我有一個對象Entity0其中包含的參考(* 1)到ENTITY1 ...

public class Entity_0 
{ 
    public int ID { get; set; } 
    public int Entity_1_ID { get; set; } 
    public Entity_1 Entity_1 { get; set; } 
} 

我也有在Entity_0一些邏輯,然而,這邏輯要求ENTITY_1不能爲空...

public Entity_2 GetEntity_2() 
{ 
    return new Entity_2() { Number = Entity_1.Value * 10 }; 
} 

當通過模式控制器結合創建Entity_0的新實例,該Entity_1_ID屬性設置,但直到它被保存到數據庫的導航ENTITY_1財產保持爲空。

我需要調用GetEntity_2()並將Entity_0和Entity_2作爲單個工作單元保存到數據庫中。這意味着我必須在調用函數之前手動從存儲庫中檢索Entity_1並將其分配給Entity_0。

我考慮的另一個選項是讓Entity_1成爲GetEntity_2方法的一個參數,但是其他任何時候被稱爲Entity_1的方法都不會爲null,因此需要一個參數將是多餘的。

因此,顯然現在一切正常,但我的問題是我是否違反了一些OOP設計規則,或者a)具有可能拋出空引用異常的方法或b)指定只應該有些時候會用到它。

不得不手動分配導航屬性真的讓我感到困擾。我希望你們中的一些人對我如何改善這一點有一些建議。

謝謝!

回答

0

啊,這竟然比我想象的要容易得多!

將對象添加到上下文後,導航屬性Entity_1被填充。直到我調用SaveChanges()並將其保存到數據庫之前,我的印象都是空的。

這可以很容易地調用的代碼如下...

var entity_1 = Entity_1CreateViewModel.Entity_1; 
entitiesRepository.Add(entity_1); 
entitiesRepository.Add(entity_1.GetEntity_2()); 
entitiesRepository.Save();