我正在创建WPF应用程序,并且我有一个现有数据库想要使用而不是重新创建。如果需要的话,我会的,但是我不想。 DB是SQLite,当我稍后将其添加到数据中并基于该数据库创建DataModel时,我得到了模型和数据库上下文,但是没有为CRUD或例如.ToList()创建任何方法,因此我可以返回桌上的所有物品。
我是否需要手动创建所有这些文件?或者像MVC可以脚手架一样,有什么方法可以做到吗?
我正在使用随Nu-Get安装的VS 2017,WPF,EF6和Sqlite
答案 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使其读取每个客户的订单。