这里有一小段代码用于测试和解释问题。我有一个表有3个字段的人:
在循环中:
Exception
...正常Exception
(与第二行相同)但值正确。在dataContext
之后使用相同的Exception
是否有事可做?
public class MyTestClass
{
private readonly DataModelDataContext _dataContext;
public MyTestClass()
{
_dataContext = new DataModelDataContext();
}
public void InsertList()
{
List<Person> liste = new List<Person>();
liste.Add(new Person { FirstName = "AAA", LastName = "BBBB" });
liste.Add(new Person { FirstName = string.Empty, LastName = null });
liste.Add(new Person { FirstName = "CCC", LastName = "DDD" });
foreach (var item in liste)
{
try
{
_dataContext.Persons.InsertOnSubmit(item);
_dataContext.SubmitChanges();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}
}
答案 0 :(得分:3)
DataContext
应始终是短暂的。您应该重新设计您的设计以实现这一目标。
您可以考虑以下几点:
using
语句轻松实现。DataContext是通过数据库映射的所有实体的源 连接。它跟踪您对所有检索到的实体所做的更改 并维护一个“身份缓存”,以保证实体 通过使用相同的对象来表示多次检索 实例
通常,DataContext实例设计为持续一个“单位” 工作“但是你的应用程序定义了这个术语.DataContext是 重量轻,创建起来并不昂贵。典型的LINQ to SQL 应用程序在方法范围或作为a创建DataContext实例 表示逻辑相关集的短寿类成员 数据库操作。
如果重新设计您的设计需要时间,您可以暂时执行以下操作:
public void InsertList(List<Person> people)
{
foreach (var person in people)
{
DoInsert(person);
// You can use the returned flag and implement the logic if desired.
// Or let the loop move on its ways.
}
}
public bool DoInsert(Person person)
{
try
{
using (DataModelDataContext dataContext = new DataModelDataContext())
{
dataContext.Persons.InsertOnSubmit(person);
dataContext.SubmitChanges();
}
return true;
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
return false;
}
}
这就是你如何调用InserList
方法:
List<Person> liste = new List<Person>();
liste.Add(new Person { FirstName = "AAA", LastName = "BBBB" });
liste.Add(new Person { FirstName = string.Empty, LastName = null });
liste.Add(new Person { FirstName = "CCC", LastName = "DDD" });
InsertList(liste);