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