2014-04-22 42 views
1

我有幾個像這樣的表,在SQL服務器ORM可插入實體到多個表

表1

ID(PK), 名稱

表2

Table1_Id(fk), Title, Description, SomeData

When in從代碼中刪除(使用C#)我想避免必須提出兩個請求來創建這些數據。

是否有一個ORM,或類似的東西Simple.Data將處理它,如果我叫

var myObject = new MyObject() 
{ 
    Name = "Name", 
    Description = "Description", 
    Title = "Title", 
    SomeData = "SomeData" 
}; 
db.Table1.Insert(myObject); 

我猜有可能是一些在那裏,非常聰明,認識到在這裏使用外鍵?

這裏我猜測的主要困難是我的Ids被SQL自動遞增,所以映射外鍵可能會很棘手。

謝謝!

+0

Profduct/Library的建議?根據常見問題,在此不受歡迎。 – TomTom

+0

您可以將這個問題改爲「如何使用任何ORM將實體存儲到多個表中?」 –

回答

2

你可以使用實體框架來做到這一點。

基本上你定義了一個實體,然後你將它映射到多個SQL表。

I.e.你可以定義一個抽象實體Person和具體實體Employes和Managers並使它們繼承Person。

然後在映射中,將共享屬性映射到Person SQL表以及Employees和Managers SQL表上的特定屬性。

有幾個教程在線如何使用它。即

生成的代碼類似於您發佈的內容:

using (var db = new TestContext()){ 
    db.Managers.Add(new Manager { Name = "a", ... }); 
    db.SaveChanges(); 
} 
+0

問題中沒有繼承。 –

+0

這就是我們最終的結果。這個問題沒有明確包括繼承,但這裏使用的方法仍然適用於我的情況,謝謝! – MartinM

2

這是很容易與NHibernate。

使用JOIN(例如使用XML,它也可以通過代碼映射):

<class name="MyObject" table="Table1"> 
    <id .../> 
    <property name="Name" /> 

    <join table="table2"> 
    <key column="Table1_Id" /> 
    <property name="Description" /> 
    <property name="Title" /> 
    <property name="SomeData" /> 
    </join> 
</class> 

它是完全透明的C#代碼。沒有必要改變你的實體(例如使用基類或其他東西)。

var myObject = new MyObject() 
{ 
    Name = "Name", 
    Description = "Description", 
    Title = "Title", 
    SomeData = "SomeData" 
}; 
session.Save(myObject);