值不能为空.参数名称:entitySet

24 entity-framework ef-migrations

我有一个相当标准的设置与简单的POCO类

public class Project
{

    public int ProjectId { get; set; }
    public string Name { get; set; }
    public int? ClientId { get; set; }
    public virtual Client Clients { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

他们使用界面

public interface IProjectRepository
{
    IEnumerable<Project> Projects { get; }
}
Run Code Online (Sandbox Code Playgroud)

并构造为ninject绑定到的存储库

public class EFProjectRepository : IProjectRepository
{
    private EFDbContext context = new EFDbContext();

    public IEnumerable<Project> Projects
    {
        get { return context.Projects; }
    }
}
Run Code Online (Sandbox Code Playgroud)

实际的上下文是一个简单的DbContext

public class EFDbContext : DbContext
{
    public DbSet<Project> Projects { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

当我尝试启用代码首次迁移时,我收到以下错误

错误的图像

我已经完成了其他项目的这个过程,从来没有出现过错误.这是连接到本地Sql Server数据库.连接字符串似乎没有问题.我在网上搜索过这个错误,但解决方案似乎回答了与我的设置没有直接关系的问题.

Th4*_*Guy 30

我有同样的问题,原因是POCO类具有类型的属性Type.

  • 我遇到了完全相同的问题,在我的 POCO 中删除 Type 类型的属性时,“启用迁移... -force”起作用了!!! (2认同)

Jam*_*mes 24

游戏后期...但如果它有帮助......

我有同样的问题,一切都运行正常,但出现了这个问题,我在我的一个课程中添加了以下内容

public HttpPostedFileBase File { get; set; }
Run Code Online (Sandbox Code Playgroud)

这似乎打破了它.

我确保我没有使用以下内容将其映射到数据库:

[NotMapped]
public HttpPostedFileBase File { get; set; }
Run Code Online (Sandbox Code Playgroud)

您需要添加以下using语句:

using System.ComponentModel.DataAnnotations.Schema;
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助


小智 7

如果未在DbContext中声明其中一个POCO类,则可能会发生此问题.

我添加了它们,错误就消失了

我更改了TaskPOCO类的名称,因为它与内置的.NET名称相关联System.Threading.Tasks.但是我没有在有任何关系的"TaskTimeLog"POCO中改变这个.在执行代码时,"TaskTimeLog"POCO中的"任务"属性没有显示错误,因为它现在附加到该线程关键字以及我首先更改了名称的原因.


Jes*_*ess 5

我收到此错误:

值不能为空。参数名称:entitySet

原来我试图加入来自 2 个不同 DbContext 的数据。

        var roles = await _identityDbContext.Roles
            .AsNoTracking()
            .Take(1000)
            .Join(_configurationDbContext.Clients.ToList(),
                a => a.ClientId,
                b => b.Id,
                (a,b) => new {Role = a, Client = b})
            .OrderBy(x => x.Role.ClientId).ThenBy(x => x.Role.Name)
            .Select(x => new RoleViewModel
            {
                Id = x.Role.Id,
                Name = x.Role.Name,
                ClientId = x.Role.ClientId,
                ClientName = x.Client.ClientName
            })
            .ToListAsync();
Run Code Online (Sandbox Code Playgroud)

解决方法是添加ToList如图所示。然后连接将发生在代码而不是数据库中。

仅当您可以检索整个表时才执行此操作。(我知道我的“客户”表总是相对较小。)