有没有办法自动为 EF 模型创建 CRUD(目前是数据库优先)



我正在创建一个 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 上

相关内容

最新更新