我在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自动递增,因此映射外键可能会很棘手。
谢谢!
答案 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);