我想用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。
答案 0 :(得分:0)
正如Mant101在评论中所说:
我不认为Linq会在这里提供帮助。你可以写一些代码 ADO.NET从数据库中获取列定义,然后使用 一些反射,以构建基于的插入/更新语句 与列匹配的对象的属性。我会问你为什么 需要这样做,你是否正在使用一个数据库 应用程序运行时的未知状态?
当StriplingWarrior向他表示:
Mant101是对的:对象关系映射器的整个目的是 通过将持久化数据转换为更容易处理持久化数据 您可以在编程语言中使用的对象。既然你没有 在这种情况下,要针对这些对象进行编程,你什么都得不到 LINQ-to-SQL的值。你最好绕过ORM并使用 直接SQL / ADO.NET。
使用LINQ的泛型方法插入任何表似乎是不可能的。 但是,您可以使用SQL。