我正在使用EF 5。
我有一个工作存储过程,它接受一个数据集并将所有数据插入一个表(它是一个简单的合并类型的东西)。
我已经通过模板浏览器“存储过程映射”将storedprocedure映射到我的插入内容,希望它“神奇地”工作。
我认为这实际上会在执行
时插入数据集db.mytable.AddRange(List<Entity>)
问题是,存储过程被调用,但是有单独的行而不是数据集。
如何使用EF插入数据集通过storedprocedure?
我已经尝试使用谷歌搜索,但我能想到的是如何从EF sp返回数据集 - 但这不是我正在寻找的。 p>
提前谢谢。
我按照理查德提供的链接,找到了“解决方案”
创建扩展方法
public static void ExecuteStoreProcedure(this ObjectContext context, string storeProcName, params object[] parameters)
{
string command = "EXEC " + storeProcName + " @Table";
context.ExecuteStoreCommand(command, parameters);
}
其中@Table
是SP为我的数据集/数据表
然后这样做:
using (var db = new MyEntities())
{
var Table = new SqlParameter("Table", SqlDbType.Structured);
Table.Value = agentList.ToDataTable();
Table.TypeName = "dbo.MyDataSetType";
var objectContext = ((IObjectContextAdapter)db).ObjectContext;
objectContext.ExecuteStoreProcedure("dbo.p_storedproc",Table);
}
其中Table
再次是参数名称,TypeName
是用于存储过程中参数的数据集/数据表类型名称。
我对这个解决方案不太满意 - 它有效,但我想要一个更实用的方法(更像“EF like”)。