我正在开发一个需要为其编写数据访问层的应用程序。我的第一个想法是为我需要的每个实体创建一堆存储库,但现在我面临的挑战是将存储库的不同操作分离开来。我想听听你对此的看法。
首先,我想支持两种类型的数据库通信--直接sql查询(例如,insert into、update等)和批量插入(如从文件(或其他源)加载数据)。然而,这两个实现所做的事情是不同的:
简单的存储库向SQL server发出查询。
大容量存储库首先向文件或内存中添加记录。一旦完成了所有记录的处理,它就会与数据库同步。
我对这个类结构的第一次尝试是:
public class Product{
}
p
请参阅我的代码如何在db中添加多个数据。
List<Employee> oEmp = new List<Employee>
{
new Employee{Name="New employee2", Salary=5000},
new Employee{Name="New employee3", Salary=6000},
new Employee{Name="New employee4", Salary=7000}
};
using (var ctx = new TestEFContext())
我正在通过SqlBulkCopy插入数据,如下所示:
public void testBulkInsert(string connection, string table, DataTable dt)
{
using (SqlConnection con = new SqlConnection(connection))
{
con.Open();
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(con))
{
bulkCopy.DestinationTableN
我已经能够通过将更新和联接分离为两个查询来优化带有联接的大型表更新。我知道更新是被记录的,但是通过创建一个临时表,我通过加入只包含我感兴趣的更新记录的临时表,大大减少了我的更新时间。
但是,我认为这种策略成功的最大原因是: SELECT #TempTable命令没有被记录,并在日志文件中作为一个大容量副本处理。我不关心脏读,因为这是一种数据仓库类型的情况。是否有人知道SELECT INTO Table或SELECT INTO #TempTable是否与数据一起存储在事务日志中?