C# EF 4.3,工作单元多个插入显示为对DB的单独点击

C# EF 4.3,工作单元多个插入显示为对DB的单独点击,c#,sql,entity-framework,C#,Sql,Entity Framework,我有以下代码: using (var context = new MyContext()) { var uow = new UnitOfWork(context); var userService = new UserService(uow); var gameService = new GameService(uow); userService.AddUser(); userService.AddUser(); userService.AddU

我有以下代码:

using (var context = new MyContext())
{
    var uow = new UnitOfWork(context);
    var userService = new UserService(uow);
    var gameService = new GameService(uow);

    userService.AddUser();
    userService.AddUser();
    userService.AddUser();
    userService.AddUser();
    userService.AddUser();
    userService.AddUser();
    userService.AddUser();
    userService.AddUser();
    userService.AddUser();
    userService.AddUser();
    gameService.AddGame();
    uow.Commit();

    Console.Read();
}
这将对数据库产生一次点击。我在看SQL Profiler,它看起来像是多次点击(或者我错了?)。这里是一个屏幕截图(不要介意表的名称,我只是在表中插入了没有后果的假数据)

这只是显示多个插入,还是对数据库的单独点击


编辑:大图是

我看到打开了一个连接,查看审核登录,然后是11条insert语句,然后是一条审核注销。这似乎是它应该工作的方式,没有什么问题。为什么你认为他的作品是多首?在你看来,什么是成功的:)

我想我应该总结一下这些评论


不幸的是,EF4.3不支持批量操作。推荐的方法是使用SqlBulkCopy,或者如果您的应用程序是性能关键型的,则使用NoSQL方法。

对我来说足够好:)我不确定审计中是否考虑了“命中”我错了,我想您不能使用EF:(那么,您是否要进行高负载的插入?对于“正常”的业务应用程序,仅以这种方式插入是正常的。如果您对大规模插入有其他要求,则使用SSIS或其他数据库技术NoSQL等等;)你真正的问题应该是像“实体框架的批量插入”,这确实是不可能的,也许我弄错了你的问题,呵呵。正如GertArnold所说,你将不得不混合技术,使用更接近ADO.NET的东西。请看一行:这是一个插入和一个为分配的Id选择,这是一个命中据我所知,NHibernate是唯一将多个查询封装在一个包中的orm(除了这个常见的插入-选择对)@ GertArnold,EF无法添加多个EnTIs,然后提交它?我认为这就是UnitOfWork patternWhen的全部要点,你认为一个命中作为一个语句被发送到数据库EF就必须用行构造函数构建一个语句(当在SQL Server 2008上运行)但要将生成的id返回到新对象将很困难。是否有批量插入的解决方法?不完全是,除非混合使用以下技术: