有没有一种方法可以自动为EF模型创建CRUD(当前为DB First)

时间:2019-04-22 02:43:43

标签: c# wpf sqlite entity-framework-6

我正在创建WPF应用程序,并且我有一个现有数据库想要使用而不是重新创建。如果需要的话,我会的,但是我不想。 DB是SQLite,当我稍后将其添加到数据中并基于该数据库创建DataModel时,我得到了模型和数据库上下文,但是没有为CRUD或例如.ToList()创建任何方法,因此我可以返回桌上的所有物品。

我是否需要手动创建所有这些文件?或者像MVC可以脚手架一样,有什么方法可以做到吗?

我正在使用随Nu-Get安装的VS 2017,WPF,EF6和Sqlite

2 个答案:

答案 0 :(得分:2)

实体框架是对象关系映射器

这意味着它将C#对象映射到表。

无论何时从bd创建模型,它都会创建一个Context类,该类将继承DbContext。在此类中,您将找到DbSet<Tablename> Tablename{get; set;}中的所有表。基本上,此列表包含行。此列表上执行的操作将影响SaveChange方法上的数据库。

  

CURD示例

    public DbSet<Student> Students { get; set; }
    //Create
        using (var context = new YourDataContext()) {

          var std = new Student()
           {
              Name = "Aviansh"
            };

             context.Students.Add(std);
             context.SaveChanges();
                    }//Basically saving it will add a row in student table with name field as avinash 

//Delete

     using (var context = new YourDataContext()) {

        var CurrentStudent=context.Students.FirstOrDefault(x=>x.Name=="Avinash")
        CurrentStudent.context.Students.Remove(CurrentStudent);
        context.SaveChanges();
}

注意:在SaveChanges上的更改将反映在Db

答案 1 :(得分:2)

要回答标题中的问题。

否。

没有像使用MVC一样单击UI来构建UI的方法。

如果一次只处理一个表,则可以构建一个通用存储库,该存储库返回给定表的列表。那不会为您节省很多编码,但是您可以做到。

如果您使该查询返回一个iQueryable而不是一个List,则可以“链接”这样的查询。在强制执行迭代之前,Linq查询不会转化为SQL,并且您可以基于其他添加条件,选择内容等以提高灵活性。

在您的帖子正文中,您询问读取和写入数据的方法。这似乎与另一个问题几乎完全无关,因为它是数据访问而不是UI。

“没有为CRUD或例如.ToList()创建任何方法,因此我可以返回表中的所有项目。”

可以使用LINQ扩展方法形式的方法。 ToList()是其中之一,除了通常使用async await和ToListAsync。

Where和Select是其他扩展方法。

您将编写任何暴露那些结果的模型层。

我不清楚您是否只是不知道linq还是什么,但这是一个示例查询。

        var customers = await (from c in db.Customers
                               orderby c.CustomerName
                               select c)
                               .Include(x => x.Orders) //.Include("Orders") alternate syntax
                               .ToListAsync();

EF使用相关实体的“延迟加载”,其中Include使其读取每个客户的订单。