我有几个课程:User.cs
,Permission.cs
等等......所有这些课程都是BaseCore.cs
的孩子,其中包含所有主要逻辑。
这是我的dbContext
课程(简化):
public class MyContext : DbContext {
public MyContext() : base("AppEntityDB") {
System.Data.Entity.Database.SetInitializer(new DropCreateDatabaseAlways<MyContext>());
}
public virtual DbSet<User> Users { get; set; }
public virtual DbSet<Permissions> Permissions { get; set; }
}
现在我正在创建baseListForm.cs
,它将成为所有ListForms的父级(windows表单应用程序)
我希望baseListForm
拥有所有基本功能,例如SaveData();
EditData()
和LoadData()
;
这是我的BaseListForm
课程(简化):
public partial class BaseListForm : Form {
private BaseCore _classType;
public virtual void LoadList() {
//I want here to load the collection of Mycontext() depending
// on what which class it calls. eg. if User.cs calls then i want
// to call DbSet<User> Users collection (accessible - _classType.Users)
var LoadCurrentClass = ClassType.
}
}
所以我想以某种方式为MyContext()
类this.GetType();
选择相应的集合。
答案 0 :(得分:0)
如果您的意思是说1个表单只能访问1个数据集,那么您可以使用泛型。
您可以添加除我的示例之外的更多功能。通常,您将为数据库上的CRUD操作创建存储库或工作单元,但这会限制您的表单访问1 DbSet。我希望你明白这一点。
表格基础
public abstract class FormBase<T> : Form
where T : BaseCore
{
private ApplicationDbContext _db = new ApplicationDbContext();
/// <summary>
/// Accessor for the DbSet
/// </summary>
protected DbSet<T> DbSet
{
get { return _db.Set<T>(); }
}
/// <summary>
/// Inform the DbContext of the changes made on an entity
/// </summary>
/// <param name="entity"></param>
protected void UpdateEntry(T entity)
{
_db.Entry(entity).State = EntityState.Modified;
}
/// <summary>
/// Save changes on the DbContext
/// </summary>
protected void SaveData()
{
_db.SaveChanges();
}
}
用户表单
public partial class frmUser : FormBase<User>
{
public frmUser()
{
InitializeComponent();
User user = this.DbSet.FirstOrDefault(); // Get first user record
user.Name = "New Name"; // Set new name value
this.UpdateEntry(user); // Inform DbContext that user has changed
this.SaveData(); // Save the changes made to the DbContext
}
}