[英]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.