相关疑难解决方法(0)

SqlBulkCopy的推荐批量大小是多少?

推荐的批量大小是SqlBulkCopy多少?我正在寻找一个可用作性能调优起点的通用公式.

.net sql-server performance ado.net

81
推荐指数
4
解决办法
5万
查看次数

如何将实体从一个Entity Framework上下文复制到另一个实体框架上下文?

如何将实体从一个上下文(继承DbContext)复制到另一个上下文?

我发现的所有东西只适用于ObjectContext但不适用于DbContext或使用DbContext但不起作用.

例如,我发现/尝试过:

  • 在CodeProject上使用ObjectContext:CloneHelper
  • 将LazyLoadingEnabled设置为false会导致无法填充ICollection <>属性(外键)
  • 将ProxyCreationEnabled设置为false会导致ICollection <>属性保持为null(外键)
  • Entry <> .State = Detached导致未填充ICollection <>属性(外键)(如果在附加属性之前设置),或者阻止清除Id(如果稍后设置).
  • AsNoTracking()导致异常(以下之一,取决于是否首先从父级的ICollection <>属性或首先插入父级)向远程上下文插入一个项目:
    • 父级:"ModelFirstSub_First_Target"角色中的对象无法自动添加到上下文中,因为它是使用NoTracking合并选项检索的.在定义关系之前,将实体显式附加到ObjectContext.
    • 项目:无法添加或附加对象,因为其EntityReference具有与此对象的EntityKey不匹配的EntityKey属性值.

我将它用于两个目的:

  1. 将所有内容从一个数据库复制到另一个数据库(目标将是原始数据库的克隆;远程数据库的本地副本).应保留一堆对象.
  2. 将所选实体从一个数据库添加或更新到另一个数据库(本地缓存中的上游更改为远程源).不需要保留新创建的对象的ID.

怎么做?

EF 6.1.1,.NET 4.5.2,C#

以下是尝试模拟第二个操作的测试代码(上游更改回远程数据库):

var addedFirst = localContext.Firsts.AsNoTracking().Single(m => m.Id == 4);
var updatedFirst = localContext.Firsts.AsNoTracking().Single(m => m.Id == 2);

addedFirst.Items.First().Id = 0;
addedFirst.Items.First().FirstId = 0;
addedFirst.Id = 0;

remoteContext.FirstItems.Add(addedFirst.Items.First());
remoteContext.Firsts.Add(addedFirst);

var originalFirst = remoteContext.Firsts.Single(m => m.Id == 2);
var originalItem = originalFirst.Items.First();
originalItem.Title = updatedFirst.Items.First().Title;
Run Code Online (Sandbox Code Playgroud)

这是模型:

public class ModelFirstBase …
Run Code Online (Sandbox Code Playgroud)

.net c# entity-framework entity-framework-6

12
推荐指数
1
解决办法
9952
查看次数

如何使用Sql Profiler捕获在SqlBulkCopy中传递的数据?

我一直在使用Sql Profiler捕获SQL语句并重新运行有问题的语句.很有用.

但是,有些代码使用SqlBulkCopy API,我不知道如何捕获它们.我看到临时表的创建,但没有任何填充它们.看起来像SqlBulkCopy绕过Sql Profiler或者我没有捕获正确的事件.

sql-server bulkinsert sqlbulkcopy sql-server-profiler sql-server-2012

9
推荐指数
2
解决办法
4023
查看次数