按类分类的实体集合

时间:2016-12-02 06:33:08

标签: c# collections entity

我有几个课程:User.csPermission.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();选择相应的集合。

1 个答案:

答案 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
    }
}