我正在创建一个 WPF 应用程序,并且我有一个现有的数据库,我想使用它而不是重新创建。如果有必要,我会的,但我宁愿不这样做。数据库是sqlite,当我稍后将其添加到我的数据中并基于数据库创建DataModel时,我得到了模型和数据库上下文,但是没有为CRUD或例如创建方法。ToList(),这样我就可以返回表上的所有项目。
我是否需要手动创建所有这些,或者有没有办法像 MVC 可以脚手架那样做到这一点?
我正在使用VS 2017,WPF,EF6和Sqlite安装Nu-Get。
回答标题中的问题。
不。
没有像 MVC 那样单击按钮的 UI 基架方法。
如果您一次只处理一个表,那么您可以构建一个通用存储库,该存储库返回给定表的列表。 这不会为您节省太多编码时间,但您可以做到。
如果您使它返回 iQueryable 而不仅仅是列表,那么您可以"链接"这样的查询。Linq 查询不会转换为 SQL,直到您强制迭代,您可以基于另一个添加条件、选择什么等
来灵活。在帖子正文中,您询问读取和写入数据的方法。 这似乎与另一个问题几乎完全无关,因为它是数据访问而不是 UI。
"没有为 CRUD 或例如 .ToList(),这样我就可以返回表上的所有项目。
有一些方法以 LINQ 扩展方法的形式提供。 ToList() 就是其中之一,除了通常使用 async await 和 ToListAsync。
">其中"和"选择"是其他扩展方法。
不过,您将编写任何显示这些结果的模型层。
我不清楚您只是不知道 linq 还是什么,但这里有一个示例查询。
var customers = await (from c in db.Customers
orderby c.CustomerName
select c)
.Include(x => x.Orders) //.Include("Orders") alternate syntax
.ToListAsync();
EF 使用相关实体的"延迟加载",即"包含"使其读取每个客户的订单。
实体框架是一个对象关系映射器
这意味着它会将 C# 对象映射到表。
每当您从 bd 创建模型时,它都会创建一个Context
类,该类将继承DbContext
。 在此类中,您将在DbSet<Tablename> Tablename{get; set;}
中找到所有表。基本上,此列表包含行。在此列表中执行的操作将影响 DB onSaveChange
方法。
库尔德示例
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 上