我只想知道是否有办法创建可更新模型。现在,我必须为模型中的所有表创建插入、更新和删除过程。这非常乏味,所以我想知道是否有一种方法可以解决这个问题?
我记得在我之前的工作中,我们过去常常在不创建过程的情况下制作模型并访问它们(CRUD)。但我现在不确定它是如何制作的。
谢谢!
我只想知道是否有办法创建可更新模型。现在,我必须为模型中的所有表创建插入、更新和删除过程。这非常乏味,所以我想知道是否有一种方法可以解决这个问题?
我记得在我之前的工作中,我们过去常常在不创建过程的情况下制作模型并访问它们(CRUD)。但我现在不确定它是如何制作的。
谢谢!
有多种方法可以自动生成(即时或在编译时已生成)对数据库的实际 SQL 调用,以在实体框架中插入、选择、更新和删除。
您可以使用 ORM 工具(例如 Linq to Entities)来最小化或消除原始 SQL 的编写。这意味着您仍然必须在实体上使用正确的属性以及其中的属性/方法,这是一个手动过程。(此 MSDN 页面上的一些背景)
您可以允许框架根据一些现有的数据库模式(仅适用于 SqlServer 类型的数据库)自动生成实体,这基本上为您完成了 90% 的工作。在某些情况下,您可能需要覆盖,例如,使用自定义的默认插入 SQL。这是通过生成数据库向导(我认为它是 Visual Studio 2008+ 的一部分)实现的。
您可以将POCO
类与 EF 一起使用。如果您使用的是 4.1 及更高版本,则可以使用DbContext
该类。要将模型映射到表/列,只需OnModelCreating
在上下文类中覆盖(继承自DbContext
)。假设您有一个名为 的模型User
、一个名为 的表Users
和上下文类MyContext
,代码可能是这样的:
public class User
{
public int UserId { get; set; }
public string UserName { get; set; }
}
public class MyContext : DbContext
{
public MyContext() :
base("MyContext")
{
}
public DbSet<User> Users { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<User>().
.ToTable("Users");
modelBuilder.Entity<User>().
.Property(d => d.UserId)
.HasColumnName("UserId")
modelBuilder.Entity<User>().
.Property(d => d.UserName)
.HasColumnName("UserName");
}
}
要使用它,只需将User
实例添加到您的DbSet
,然后调用SaveChanges
:
using(MyContext ctx = new MyContext())
{
var u = new User() { UserId = 1, UserName = "A" };
ctx.Users.Add(u);
ctx.SaveChanges();
}