2012-06-23 46 views
0

我的數據庫中存在複雜的關係。將ASP.NET實體數據用於複雜關係

Packages (packageID, package_name , ....) 
VariantPackage (packageID, variantID) 
Variant (variantID, variant_name, ....) 
ProductVariant (variantID, productID) 
Product (productID, product_name, ....) 

(我想你可以假設ID字段分別是主鍵或外?)

實體框架優雅拿起這一點,因爲如果這樣做:

Package newPackage = new Package() 
{ 
packageID = Guid.NewGuid() 
etc . . . 
}; 

Variant newVariant = new Variant() 
{ 
variantID = Guid.NewGuid() 
etc . . . 
}; 

我在下面做這一行時可以選擇添加變體到該包

newPackage.Variant.AddObject(newVariant); 
_db.Package.AddObject(newPackage); 
_db.SaveChanges(); 

N當我SaveChanges會在那兩行中創建所有3個表中的條目嗎?如果我已經正確設置了模型?

由於

回答

0

我現在用的CodeFirst實體框架:

public abstract class DbEntity 
{ 
    [Key, DatabaseGenerated(DatabaseGenerated.Identity)] 
    [HiddenInput(DisplayValue = false)] 
    public Guid Id { get; set; } 
} 

public class Package : DbEntity 
{ 
    public string Name { get; set; } 
    public List<Variant> Variants { get; set; } 
} 

public class Variant : DbEntity 
{ 
    public string Name { get; set; } 
    public List<Product> Products { get; set; } 
} 

public class Product : DbEntity 
{ 
    public string Name { get; set; } 
} 

則創造了這個時候,應該再創建合適的表和約束。

0

每個表都應有一個插入件的方法(呼叫爲一個表的ADDOBJECT)。並安排表格相關的插入方法的調用非常重要。 使用插入變此代碼DB:

public void InsertVariant(Variant entry) 
{ 
      var t = _db.Variant.CreateObject(); 
      t.variant_name = entry.variant_name; 
// and copy all field ... 
// then 
      _db.Variant.AddObject(t); 
      _db.SaveChanges(); 
} 
+0

我的理解是,但你是說,不是一氣呵成,即使實體框架的主要工作是爲關係數據庫提供支持,也應該單獨做它。 –

+0

請仔細閱讀我的編輯內容更有意義 –