【问题标题】:Data is not saving in db using generic repository and Entity Framework 5.0数据未使用通用存储库和实体框架 5.0 保存在数据库中
【发布时间】:2018-03-19 14:39:28
【问题描述】:

我使用通用存储库和实体框架创建了应用程序 asp.net。 抽象类有这样的代码:

public interface IGenericRepository<T> where T : class 
{
    IQueryable<T> GetAll();
    IQueryable<T> FindBy(Expression<Func<T, bool>> predicate);
    void Add(T entity);
    void Delete(T entity);
    void Edit(T entity);
    void Save();
}

GenericRepository 类包含以下代码:

public abstract class GenericRepository<C, T> : IGenericRepository<T> where T : class where C : DbContext, new() 
{
    private C _entities = new C();

    public C Context {
        get { return _entities; }
        set { _entities = value; }
    }

    public virtual IQueryable<T> GetAll() {
        IQueryable<T> query = _entities.Set<T>();
        return query;
    }

    public IQueryable<T> FindBy(System.Linq.Expressions.Expression<Func<T, bool>> predicate) {
        IQueryable<T> query = _entities.Set<T>().Where(predicate);
        return query;
    }

    public virtual void Add(T entity) {
        _entities.Set<T>().Add(entity);
    }

    public virtual void Delete(T entity) {
        _entities.Set<T>().Remove(entity);
    }

    public virtual void Edit(T entity) {
        _entities.Entry(entity).State = System.Data.EntityState.Modified;
    }

    public virtual void Save() {
        _entities.SaveChanges();
    }
}

现在我想为我的每个数据库表创建一个类来保存数据。

这是我的一个数据库表的代码:

public class AmountDLL : GenericRepository<HMSEntities, Tbl_Amount>
{
    //:Base<Tbl_Amount>

    public override void Add(Tbl_Amount entity)
    {
        base.Add(entity);
    }
}

最后我尝试在按钮点击时通过前端添加数据

 protected void btnsave_Click(object sender, EventArgs e)
 {
        AmountDLL amtdll = new AmountDLL();
        Tbl_Amount tblamt = new Tbl_Amount();
        tblamt.Amt_Type = txt_amt_type.Text;
        tblamt.UserId = User.Identity.GetUserId();

        if (CheckBox1.Checked == true)
        {
            tblamt.IsActive = true;
        }
        else
        { 
            tblamt.IsActive = false;
        }

        amtdll.Add(tblamt);
    }

当我运行应用程序时,它运行良好,但没有将数据保存在表中。

请检查并建议任何更改

【问题讨论】:

标签: c# entity-framework generics repository


【解决方案1】:

在 Entity Framework 中,为每个实体保存插入、更新或删除的数据,我们在该实体的实例上调用 SaveChanges()。

在您的情况下,您需要调用Save() 方法来持久化到您在存储库类中定义的数据库,以便将SaveChanges() 调用抽象为您各自的实体类型:

amtdll.Add(tblamt);
amtdll.Save();  // this needs to be called.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-11
    相关资源
    最近更新 更多