我最近开始在我的.NET 4.0应用程序中使用Entity Framework 4.0,并对与池化相关的一些事情感到好奇.
据我所知,连接池由ADO.NET数据提供程序管理,在我的情况下是MS SQL服务器.当您实例化新的实体context(ObjectContext)时,这是否适用,即无参数new MyDatabaseModelEntities()?
a)为应用程序创建全局实体上下文(即一个静态实例)或b)使用using块为每个给定操作/方法创建和公开实体上下文有哪些优点和缺点.
我应该了解的某些场景的任何其他建议,最佳实践或常用方法?
我有一个简单的Web应用程序,允许用户上传包含特定数据的2个.csv文件.为了保持数据,我使用了Entity Framework两种不同的数据Import-methods.
第一种进口方法
public void ImportOne(string path)
{
StreamReader sr = new StreamReader(path);
using (var db = new ContextEv("RndContext"))
{
db.Database.ExecuteSqlCommand("DELETE FROM TableA");
db.Database.ExecuteSqlCommand("DELETE FROM TableB");
while (!sr.EndOfStream)
{
string[] data = sr.ReadLine().Split(';');
string houseId = data[0];
House house = new House()
{
HouseId = houseId,
};
House dummy = db.Houses.Find(houseId);
if (!dummy.HouseId.Equals(house.HouseId))
{
db.Houses.Add(house);
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
此行失败:House dummy = db.Houses.Find(houseId);出现以下异常:
其中一个主键值的类型与实体中定义的类型不匹配.有关详细信息,请参阅内部异常.\ r \nParametername:keyValues
InnerException的ErrorContext:
关键字'AS',第1行,第22列
InnerException的ErrorDescription:
查询语法无效.
好吧,我检查了这个类型是否真的存在问题.但是我没有发现任何错误.
关于它的"有趣"的事情是,我在另一个Import-method中使用相同的Find-method,它没有任何异常!
using …Run Code Online (Sandbox Code Playgroud)