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)

ASP.NET Core EF Add-Migration 命令不起作用

ASP.NET 5 多个 dbcontext 问题

ASP.NET Core DbContext 注入