使用GenericContext迁移

时间:2017-11-29 19:37:34

标签: .net-core entity-framework-core ef-migrations

我正在尝试使用迁移,但我有以下问题

$ dotnet ef migrations add InitialMigration
No DbContext was found in assembly 'VirtualStore.Data'. Ensure that you're using the correct assembly and that the type is neither abstract nor generic.

这里是我的Context类

using Microsoft.EntityFrameworkCore;
using VirtualStore.Mapping.Mapping;

namespace VirtualStore.Data
{
    public class Context<T> : DbContext where T : Entity
    {

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


        public Context()
        {
            Database.EnsureCreated();
        }
        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);
        }

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.UseSqlServer("Data Source=DESKTOP-3UEM3PC;Initial Catalog=VIRTUALSTORE;Integrated Security=SSPI;");
            base.OnConfiguring(optionsBuilder);
        }
    }
}

和我的解决方案

enter image description here

任何人都知道如何使用此架构进行迁移?

2 个答案:

答案 0 :(得分:2)

您不希望DbContext“Context”是通用的。使“Context”不是通用的,并为您映射到数据库的每个实体类型包含单独的DbSet属性。

https://docs.microsoft.com/en-us/ef/core/modeling/included-types

答案 1 :(得分:1)

为什么要创建通用DbContext?从查看代码开始,每个DbContext创建限制为一个实体。例如,假设您必须创建Sale和相关的SaleItem。您必须实例化两个DbContext对象而不是一个......这会打开一整套问题。

我的建议不是创建泛型DbContext,而是使DbSet通用。有几种方法可以做到,但here是我最近做过的一个例子。

另请注意,在此解决方案中,我必须使用项目和项目源切换:

dotnet ef migrations add InitialMigration -p ..\Freelanceme.Data -s ..\Freelanceme.WebApi