2016-09-16 6 views
1

У меня проблема, мой DbContext не обновляет элементы внутри моего DbSet для некоторых конкретных случаев.ASP.NET EF - DbSet DbContext не обновляется

У меня есть два проекта: Backend (где файл .mdf и файл строки подключения) и WCF Service Project (где ссылка (добавить существующий элемент) в .mdf и файл строки подключения).

В моей Backend Project У меня есть следующие:

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 Service:

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); 
     } 
} 
} 

Рабочие Сценарии:

  • Я открываю свое представление в проектах Backend ASP Web Project (Insert/Select) работает отлично каждый раз.

Не Работающие Сценарии:

DbSet изначально 4 шт

  • Я открываю http://localhost:8080/diamond/category показывает 4 шт (OK)
  • I Открыть мой взгляд в Backend ASP кадры показывает 4 пункты (ОК)
  • Я добавляю один элемент из моего Backend ASP показывает 5 элементов (ОК)
  • Я снова открыть мой http://localhost:8080/diamond/category показывает все еще 4 пунктов (NOT OK)

Мой файл web.config в Backend Project:

<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> 

Мой файл web.config в службе WCF Проект:

<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 файл существующий в проекте Backend и связан в проекте службы 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> 

Решение Изображение может быть, это помогает:

Solution Image

+0

Вы уверены, что тот же файл базы данных используется как для ФОС и проектов ASP.NET? – Evk

+0

Да, это так, потому что, если я остановлю все приложение и снова запустив страницу службы, вы увидите обновленную вставку ... также я использую только файл mdf во всем решении. – TiagoM

ответ

0

вам не нужно указывать «дб. Dispose();»

+0

Да, я знаю, вызов на вызов был способом попытаться исправить проблему, но не работает. – TiagoM

0

Я думал, может быть, моя служба 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(); 
    } 
} 
Смежные вопросы