2013-09-25 53 views
0

我有一个数据库第一个实体框架项目。对于我添加的每个实体,都将一个集合添加到实体的DbContext中。我在DbContext构造函数中设置了LazyLoadingEnabled = false。如果我闯入下面的代码并检查CustomerDepartments的数量,我会得到表格的总数。如果我只是添加一条新记录,我预计在添加之前计数为0,之后为1。我在无状态环境中使用它,所以加载整个表来添加记录似乎是荒谬的。我究竟做错了什么?实体框架是否会自动加载我的所有数据(不是引用和惰性加载关闭)?

using (Model.SupportEntities support = new Model.SupportEntities(_state.Credentials, _handler.ReadWriteConnectionString)) 
{ 
    Model.CustomerDepartment department = Json.JsonConvert.DeserializeObject<Model.CustomerDepartment>(_insertObject); 
    support.CustomerDepartments.Add(department); 
    support.SaveChanges(); 
    _state.ReturnNewIdAsJson(department.CustomerDepartmentID); 
} 
+0

也许我错误地解释了你的问题,但是不应该将LazyLoadingEnabled设置为true吗? – Erwin

回答

1

看来你误解了如何DbContextDbSet作品。

这可能是最好的,如果你得到一个记录EntityFramework SQL调用的工具尝试Clutch.Diagnostics.EntityFramework

当你调用DbSet<T>IEnumerable<T>.Count(),实体框架运行下面的查询

SELECT COUNT(*) FROM TableName; 

但它不会加载整个表。

你想为你想要的行为的实际调用要么

support.CustomerDepartments.Local.Count; 

OR

support.ChangeTracker.Entries<T>().Count() 

这些不会碰到数据库。

您必须记住DbSet是Database表的抽象,因此调用它的Count()会告诉您表中有多少行。

顺便说一句。仅供参考。该公约是呼叫您的名字DbContextSupportContextModel命名类或名称空间表明他们是您的POCO。

相关问题