使用LINQ将行插入任何表

时间:2015-08-12 15:09:10

标签: c# sql-server linq-to-sql

我想用LINQ开发一个动态插入方法。

我们假设我有两个表,如:

Product
{
   id int,
   name varchar(20),
   price int
}

Factory
{
   id int,
   name varchar(50),
   address varchar(240)
}

但是,请考虑我不知道表格,只知道它们的名称。

这就是我获取表的列名的方式,我知道它的名字:

var db = new DataContext();
var columnNames = db.Mapping.MappingSource
                      .GetModel(typeof(DataContext))
                      .GetMetaType(typeof(table_name))
                      .DataMembers;

但我无法弄清楚如何获取我知道其名称的表的列名。到目前为止我尝试了什么:

context.Mapping.GetTables().FirstOrDefault(
                x=> x.TableName == table_name ).Model.ContextType.Attributes;

table_name是动态变化的,如:Product,Factory等。但我认为这种方式是死路一条。

所以,最后我无法弄清楚如何获取随机表的列名,更不用说在随机表中插入一行了。

我可以使用SqlCommand以经典方式执行此操作,但我想知道如何使用LINQ。

1 个答案:

答案 0 :(得分:0)

正如Mant101在评论中所说:

  

我不认为Linq会在这里提供帮助。你可以写一些代码   ADO.NET从数据库中获取列定义,然后使用   一些反射,以构建基于的插入/更新语句   与列匹配的对象的属性。我会问你为什么   需要这样做,你是否正在使用一个数据库   应用程序运行时的未知状态?

当StriplingWarrior向他表示:

  

Mant101是对的:对象关系映射器的整个目的是   通过将持久化数据转换为更容易处理持久化数据   您可以在编程语言中使用的对象。既然你没有   在这种情况下,要针对这些对象进行编程,你什么都得不到   LINQ-to-SQL的值。你最好绕过ORM并使用   直接SQL / ADO.NET。

使用LINQ的泛型方法插入任何表似乎是不可能的。 但是,您可以使用SQL。