带数据库的WPF应用程序不会更新数据库

时间:2013-11-21 17:05:45

标签: c# wpf database

我正在尝试创建一个WPF应用程序,该应用程序通过某些实体数据模型与简单数据库建立连接。我可以从数据库中读取所有内容,但如果我编辑或删除任何内容,它只会更改应用程序中的数据,而不会更改数据库中的数据。 第二次运行应用程序时,即使我在运行应用程序时第一次添加内容,数据库也是空的。 你能告诉我我做错了吗?

这是我使用数据库的类:

public partial class MainWindow : Window
{
    private Database db;
    private DatabaseContext _dbcontext = new DatabaseContext();
    public MainWindow()
    {
        InitializeComponent();

        db = new Database(_dbcontext);
        IQueryable<Person> item = (IQueryable<Person>)db.People.GetAll();

        Person p = new Person()
        {
            ID = 1,
            Name = "Milos"
        };

        db.People.Add(p);
        db.save();
    }
}

数据库如下所示:

public class Database
{
    private DatabaseContext _DatabaseContext;

    public Database(DatabaseContext _Databasecontext1)
    {
        _DatabaseContext = _Databasecontext1;
    }

    public IRepository<Person> People
    {
        get { return new Repository<Person>(_DatabaseContext); }
    }

    public void save()
    {
        int rows = _DatabaseContext.SaveChanges();
    }
}

和存储库:

public class Repository<T> : IRepository<T> where T : class
{
    protected DatabaseContext DbContext { get; set; }
    protected DbSet<T> DbSet { get; set; }

    public Repository(DatabaseContext dbContext)
    {
        if (dbContext == null) throw new NullReferenceException("dbContext");
        DbContext = dbContext;
        DbSet = dbContext.Set<T>();
    }

    public IQueryable GetAll()
    {
        return DbSet;
    }

    public T GetById(int id)
    {
        return DbSet.Find(id);
    }

    public void Add(T entity)
    {
        DbSet.Add(entity);
    }

    public void Update(T entity, int id)
    {
        var entry = DbContext.Entry(entity);
        var currententry = GetById(id);
        DbContext.Entry(currententry).CurrentValues.SetValues(entity);
    }

    public void Delete(T entity)
    {
        var entry = DbContext.Entry(entity);
        DbSet.Attach(entity);
        entry.State = EntityState.Deleted;
    }

    public void Delete(int id)
    {
        var entity = GetById(id);
        if (entity == null) return;
        Delete(entity);
    }
}

0 个答案:

没有答案