0

我们正在与软件领域的多人合作。因此,我们发现并行工作很方便。因此,正在添加实体的 C# 代码,同时正在创建表定义(db first 方法)。

我的问题是,这个 MyEntity 和 DbSet 是否可以已经添加到上下文中的 C# 代码中,而没有 EF 抛出异常,因为数据库表还没有在数据库中。这将允许 C# 代码开发同时继续(创建存储库、提供程序、验证等)。当然是在 C# 代码中没有使用 DbSet 的情况下。

那么 EF 是否可以将 DbSet 作为上下文的一部分,而数据库中尚不存在 MyEntity 的表?

4

1 回答 1

0

是的,您可以在没有表格的情况下将实体添加到上下文中。我用一个测试项目验证了这一点。请参阅下面的代码。它连接到本地机器上的现有数据库。创建上下文没有任何问题。您甚至可以使用该Entities属性、添加一个实体和SaveChanges(). 它将第一次为您创建表格。第二次表不存在时(例如,因为它在创建后被手动删除),它将引发异常。

它将抛出异常,因为它将数据库的状态记录保存在__MigrationHistory.

    using System.Data.Entity;

namespace EntityFrameWorkMissingTableTest
{
    class Program
    {
        static void Main(string[] args)
        {
            using (var context = new MyContext("Data Source=localhost;Initial Catalog=MyContext;Integrated Security=True"))
            {
                context.Entities.Add(new Entity());
                context.SaveChanges();
            }
        }

        public class MyContext : DbContext
        {
            public MyContext(string connectionString)
                : base(connectionString)
            {

            }

            public DbSet<Entity> Entities { get; set; }
        }

        public class Entity
        {
            public int Id { get; set; }
        }
    }
}
于 2018-11-05T10:52:59.710 回答