簡體   English   中英

C#WPF從組合框切換數據庫上下文

[英]C# WPF Switch db context from combobox

我有一個ComboBox對象

<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
    {
       // ????
    }

使用您的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();
         }
      }
}

我最終創建了一個接口類,將所有屬性移出了模型類,並移入了我的接口,更改了兩個模型類以繼承該接口,將接口屬性添加到模型類中,然后根據組合框更改了上下文

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM