0

我有一个数据库第一个实体框架项目。对于我添加的每个实体,都会将一个集合添加到该实体的 DbContext 中。我LazyLoadingEnabled = false在 DbContext 构造函数中明确设置。如果我闯入以下代码并检查 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);
}
4

1 回答 1

1

您似乎误解了如何DbContextDbSet工作。

如果您拥有一个记录 EntityFramework SQL 调用的工具,那么最好是 try Clutch.Diagnostics.EntityFramework

当您调用IEnumerable<T>.Count()DbSet<T>,实体框架会运行以下查询

SELECT COUNT(*) FROM TableName;

但它不会加载整个表。

您想要的行为的实际调用是

support.CustomerDepartments.Local.Count;

或者

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

这些不会命中数据库。

您必须记住这DbSet是数据库表的抽象,因此在其上调用 Count() 应该会告诉您表中有多少行。

顺便提一句。供参考。约定是 call name your DbContextto be SupportContextModel命名类或命名空间表明它们是您的 POCO。

于 2013-09-26T09:29:39.897 回答