【问题标题】:Create an Updatable Model - Entity Framework创建可更新模型 - 实体框架
【发布时间】:2012-07-09 05:02:08
【问题描述】:

我只是想知道是否有办法创建可更新模型。现在,我必须为模型中的所有表创建插入、更新和删除过程。这很乏味,所以我想知道是否有一种方法可以解决这个问题?

我记得在我之前的工作中,我们曾经在不创建过程的情况下制作模型并访问它们 (CRUD)。但我现在不确定它是如何制作的。

谢谢!

【问题讨论】:

    标签: entity-framework model entity


    【解决方案1】:

    您可以通过多种方式自动生成(即时或在编译时已生成)对数据库的实际 SQL 调用,以在实体框架中插入、选择、更新和删除。

    1. 您可以使用 ORM 工具(例如 Linq to Entities)来最小化或消除原始 SQL 的编写。这意味着您仍然必须在实体上使用正确的属性以及其中的属性/方法,这是一个手动过程。 (this MSDN page 的一些背景资料)

    2. 您可以允许框架根据一些现有的数据库模式(仅适用于 SqlServer 类型的数据库)自动生成实体,这基本上为您完成了 90% 的工作。在某些情况下,您可能需要覆盖,例如,使用自定义的默认插入 SQL。这是通过Generate Database Wizard(我认为它是Visual Studio 2008+ 的一部分)实现的。

    【讨论】:

      【解决方案2】:

      您可以在 EF 中使用 POCO 类。如果您使用的是 4.1 及更高版本,则可以使用 DbContext 类。要将模型映射到表/列,只需在上下文类(继承自 DbContext)中覆盖 OnModelCreating。假设您有一个名为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();
      }
      

      【讨论】:

        猜你喜欢
        • 2011-09-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多