Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 可以将实体插入多个表中的ORM_C#_Sql_Entity Framework_Nhibernate_Orm - Fatal编程技术网

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

C# 可以将实体插入多个表中的ORM,c#,sql,entity-framework,nhibernate,orm,C#,Sql,Entity Framework,Nhibernate,Orm,在SQL server中,我有两个这样的表 表1 Id(主键), 名字 表2 表1_Id(fk), 标题 描述 一些数据 在从代码插入时(使用C#),我希望避免必须发出两个请求才能创建此数据 有没有ORM,或者类似Simple.Data的东西,如果我打电话,它会处理吗 var myObject = new MyObject() { Name = "Name", Description = "Description", Title = "Title", SomeDa

在SQL server中,我有两个这样的表

表1

Id(主键), 名字

表2

表1_Id(fk), 标题 描述 一些数据

在从代码插入时(使用C#),我希望避免必须发出两个请求才能创建此数据

有没有ORM,或者类似Simple.Data的东西,如果我打电话,它会处理吗

var myObject = new MyObject()
{
    Name = "Name",
    Description = "Description",
    Title = "Title",
    SomeData = "SomeData"
};
db.Table1.Insert(myObject);
我想可能有什么东西足够聪明,可以识别这里使用的外键

我想这里的主要困难是我的ID是由SQL自动递增的,所以映射外键可能很棘手


谢谢

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

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

也就是说,您可以定义一个抽象实体Person和具体实体employees和Managers,并使其继承Person

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

网上有几个教程介绍如何使用。i、 e

生成的代码与您发布的代码类似:

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

您可以使用实体框架来实现这一点

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

也就是说,您可以定义一个抽象实体Person和具体实体employees和Managers,并使其继承Person

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

网上有几个教程介绍如何使用。i、 e

生成的代码与您发布的代码类似:

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

使用NHibernate非常容易

使用连接(例如XML,也可以通过代码进行映射):


使用NHibernate非常容易

使用连接(例如XML,也可以通过代码进行映射):


产品/图书馆建议?根据常见问题解答,这里不欢迎您。您可以将问题重新表述为“如何使用任何ORM将实体存储到多个表中?”产品/库建议?根据FAQ,这里不欢迎您。您可以将问题重新表述为“如何使用任何ORM将实体存储到多个表中?”问题中没有继承。这是我们最后讨论的问题。这个问题没有明确包括继承,但是这里使用的方法仍然适用于我的情况,谢谢!在这个问题上没有继承权。这就是我们最终要做的。这个问题没有明确包括继承,但是这里使用的方法仍然适用于我的情况,谢谢!
var myObject = new MyObject()
{
    Name = "Name",
    Description = "Description",
    Title = "Title",
    SomeData = "SomeData"
};
session.Save(myObject);