可以将实体插入多个表的ORM

时间:2014-04-22 11:50:15

标签: c# sql entity-framework nhibernate orm

我在SQL server

中有几个这样的表

表1

Id(pk), 名称

表2

Table1_Id(fk), 标题, 描述, SomeData

从代码插入时(使用C#)我想避免必须发出两个请求来创建这些数据。

是否有一个ORM,或类似Simple.Data的东西,如果我调用

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

我猜可能有些东西足够聪明,可以识别这里使用的外键吗?

我猜测的主要困难是我的ID会被SQL自动递增,因此映射外键可能会很棘手。

谢谢!

2 个答案:

答案 0 :(得分:2)

您可以使用实体框架来完成它。

基本上,您定义了一个实体,然后将其映射到多个SQL表。

即。您可以定义一个抽象实体Person和具体实体Employes和Managers,并使它们继承Person。

然后在映射中将共享属性映射到Person SQL表以及Employees和Managers SQL表上的特定属性。

有几个关于如何使用它的在线教程。即

结果代码与您发布的代码类似:

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

答案 1 :(得分:2)

使用NHibernate非常容易。

使用连接(例如,使用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);