2016-01-19 3 views
0

У меня есть объект COMBOBOXC# WPF Переключить дб контекст из выпадающего списка

<ComboBox Name="Environment"> 
<ComboBoxItem Content="Development"/> 
<ComboBoxItem Content="Production"/> 
</ComboBox> 

Я хотел бы иметь возможность переключать модели, которые я использую на основе этого комбинированного окна

namespace MyNamespace 
{ 
    public partial class MainWindow : Window 
    { 
     object entity; 
     private void LoadTables() 
     { 
      if (Environment.Text == "Production") 
      { 
       entity = new Entities1(); 
      } 
      if (Environment.Text == "Development") 
      { 
       entity = new Entities2(); 
      } 
      LoadTable1(); 
     }   
     private void LoadTable1() 
     { 
      // cannot use entity here 
      entity.someTable.ToList(); 
     } 
     } 
} 

Проблема заключается в том что я не могу передать объект сущности методам, чтобы я мог делать запросы к базе данных.

Я пробовал использовать интерфейсы, но я не уверен, как их реализовать. У меня есть это, но не уверен, что его правильная или как использовать их любая помощь будет очень признательна.

interface iMyDev 
    { 
     Entities2 entity { get; set; }    
    } 
    interface iMyProd 
    { 
     Entities1 entity { get; set; } 
    } 
    class MyBass:iMyDev,iMyProd 
    { 
     // ???? 
    } 
+0

Нет на 100% уверен, что вы собираетесь здесь делать, но ваши интерфейсы/структура классов выглядят немного странно. Вы должны определить интерфейс «IEntity», а затем два класса, которые реализуют этот интерфейс, «DevEntity» и «ProdEntity». –

ответ

0

я в конечном итоге создание класса интерфейса переместили все свойства из классы моделей и в мой интерфейс изменили оба класса модели на наследование интерфейса добавили свойства интерфейса к классам модели затем изменил контекст зависимости, зависящего от combobox

namespace myNamespace 
{ 
    public partial class MainWindow : Window 
    { 
     public IDBContext context { get; set; } 

     public MainWindow() 
     { 
      InitializeComponent(); 
      LoadTables() 
     } 

     private void LoadTables() 
     { 
      if(cbEnvironment.Text == "Production") 
      { 
       context = new Entities1(); 
      } 
      else 
      { 
       context = new Entities2(); 
      } 
     } 

    } 
    public interface IDBContext 
    { 
     IDbSet<Table1> Table1 { get; set; } 
     IDbSet<Table2> Table2 { get; set; }   
    } 

} 

namespace myNamespace 
{ 
    using System; 
    using System.Data.Entity; 
    using System.Data.Entity.Infrastructure; 

    public partial class Entities1 : DbContext, IBassContext 
    { 
     public Entities1() 
      : base("name=Entities1") 
     { 
     } 

     protected override void OnModelCreating(DbModelBuilder modelBuilder) 
     { 
      throw new UnintentionalCodeFirstException(); 
     } 

     public virtual IDbSet<Table1> Table1 { get; set; } 
     public virtual IDbSet<Table2> Table1 { get; set; } 
    } 
} 

namespace myNamespace 
{ 
    using System; 
    using System.Data.Entity; 
    using System.Data.Entity.Infrastructure; 

    public partial class Entities2 : DbContext, IBassContext 
    { 
     public Entities2() 
      : base("name=Entities2") 
     { 
     } 

     protected override void OnModelCreating(DbModelBuilder modelBuilder) 
     { 
      throw new UnintentionalCodeFirstException(); 
     } 

     public virtual IDbSet<Table1> Table1 { get; set; } 
     public virtual IDbSet<Table2> Table1 { get; set; } 
    } 
} 
0

Использование ComboBox пример, я думаю, что это то, что вы хотите сделать.

Во-первых, определить свой интерфейс и классы, которые реализуют его:

interface IEntity 
{ 
    IEnumerable<object> SomeTable { get; } 
} 

class DevEntity : IEntity 
{ 
    ... 
} 

class ProdEntity : IEntity 
{ 
    ... 
} 

Тогда ваш Window будет выглядеть следующим образом:

namespace MyNamespace 
{ 
    public partial class MainWindow : Window 
    { 
     IEntity entity; 
     private void LoadTables() 
     { 
      if (Environment.Text == "Production") 
      { 
       entity = new ProdEntity(); 
      } 
      else if (Environment.Text == "Development") 
      { 
       entity = new DevEntity(); 
      } 

      LoadTable1(); 
     } 

     private void LoadTable1() 
     { 
      entity.SomeTable.ToList(); 
     } 
     } 
} 
Смежные вопросы