ASP.NET EF - DbContext 的 DbSet 未更新
Posted
技术标签:
【中文标题】ASP.NET EF - DbContext 的 DbSet 未更新【英文标题】:ASP.NET EF - DbSet of DbContext not being Updated 【发布时间】:2017-01-24 15:25:03 【问题描述】:我遇到了一个问题,我的 DbContext 没有针对某些特定情况更新我的 DbSet 中的项目。
我有两个项目,一个后端(.mdf 文件和连接字符串文件在哪里)和 WCF 服务项目(.mdf 和连接字符串文件的链接(添加现有项目)在哪里)。
在我的后端项目中,我有以下内容:
namespace BackEnd
public static class CategoryEngine
public static void InsertCategory(string categoryName, string categoryDescription)
using (var db = new DiamondsDbContext())
db.CategorySet.Add(new Category Name = categoryName, Description = categoryDescription );
db.SaveChanges();
db.Dispose();
public static List<Category> SelectCategory()
using (var db = new DiamondsDbContext())
return db.CategorySet.ToList();
namespace BackEnd.DAL
public class DiamondsDbContext : DbContext
public DiamondsDbContext()
: base("DefaultConnection")
protected override void OnModelCreating(DbModelBuilder modelBuilder)
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
public DbSet<Category> CategorySet get; set;
在我的 WCF 服务项目中:
namespace API
[ServiceBehavior(IncludeExceptionDetailInFaults = true)]
public class Diamond : IDiamond
public List<Category> SelectCategory()
return CategoryEngine.SelectCategory();
public void InsertCategory(Category category)
CategoryEngine.InsertCategory(category.Name, category.Description);
工作场景:
我在后端 ASP Web 项目(插入/选择)方法中打开视图 每次都能正常工作。不工作场景:
DbSet 最初有 4 个项目
我打开我的http://localhost:8080/diamond/category 显示 4 个项目(确定) I Open my view in Backend ASP Stills 显示 4 个项目 (OK) 我从我的后端 ASP 添加一项显示 5 项 (OK) 我再次打开我的http://localhost:8080/diamond/category 节目 仍然 4 项(不好)我在后端项目中的 web.config 文件:
<configuration>
<configSections>
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<connectionStrings configSource="ConnectionString.config">
</connectionStrings>
<!-- more stuff not related with the issue -->
</configuration>
我在 WCF 服务项目中的 web.config 文件:
<configuration>
<configSections>
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<connectionStrings configSource="ConnectionString.config">
</connectionStrings>
</configuration>
我的 ConnectionString.config 文件存在于后端项目中并链接到 WCF 服务项目中:
<connectionStrings>
<!--<add name="DefaultConnection" connectionString="Data Source=(LocalDb)\MSSQLLocalDB;Integrated Security=True" providerName="System.Data.SqlClient" />-->
<!--<add name="DefaultConnection" connectionString="Server=(localdb)\diamonds4;Integrated Security=true" providerName="System.Data.SqlClient" />-->
<add name="DefaultConnection" connectionString="Data Source=(localdb)\teste123;AttachDbFilename=|DataDirectory|77Diamonds.mdf;Integrated Security=True" providerName="System.Data.SqlClient" />
</connectionStrings>
解决方案图片也许有帮助:
【问题讨论】:
您确定 wcf 和 asp.net 项目使用同一个数据库文件吗? 是的,因为如果我停止整个应用程序并再次运行,服务页面会显示更新的插入...而且我在整个解决方案中只使用了一个 mdf 文件.. 【参考方案1】:你不需要指定“db.Dispose();”
【讨论】:
是的,我知道,dispose 调用是尝试解决问题的一种方法,但没有奏效..【参考方案2】:我在想,也许我的 WCF 服务正在缓存 GET 请求?并始终发送相同的响应?我如何确定这一点?
在这里查看我的 WCF Rest 接口实现:
namespace API
[ServiceContract]
public interface IDiamond
[OperationContract]
[WebInvoke(Method = "GET",
ResponseFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.Bare,
UriTemplate = "category")]
List<Category> SelectCategory();
【讨论】:
以上是关于ASP.NET EF - DbContext 的 DbSet 未更新的主要内容,如果未能解决你的问题,请参考以下文章
Asp.net WebApi + EF 单元测试架构 DbContext一站到底
在 ASP.NET Core 中使用 DbContext 注入并行 EF Core 查询
在带有 EF7 的 ASP.NET5.0 中添加连接字符串以使用 dll 存储库库(基于 EF6)