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

时间:2014-03-27 06:55:27

标签: 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; }
}

他们使用界面

public interface IProjectRepository
{
    IEnumerable<Project> Projects { get; }
}

并构建为ninject绑定到

的存储库
public class EFProjectRepository : IProjectRepository
{
    private EFDbContext context = new EFDbContext();

    public IEnumerable<Project> Projects
    {
        get { return context.Projects; }
    }
}

实际上下文是简单的DbContext

public class EFDbContext : DbContext
{
    public DbSet<Project> Projects { get; set; }
}

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

image of error

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

12 个答案:

答案 0 :(得分:30)

我遇到了同样的问题,原因是POCO类的属性为Type

答案 1 :(得分:17)

比赛结束......但如果有帮助......

我遇到了同样的问题,一切正常,但是这个问题出现了,我在我的一个课程中添加了以下内容

public HttpPostedFileBase File { get; set; }

似乎打破了它。

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

[NotMapped]
public HttpPostedFileBase File { get; set; }

您需要添加以下using语句:

using System.ComponentModel.DataAnnotations.Schema;

希望这有帮助

答案 2 :(得分:6)

如果未在DbContext中声明其中一个POCO类,则会出现此问题。

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

我更改了Task POCO类的名称,因为它与内置的.NET名称System.Threading.Tasks相关联。但是我没有在&#34; TaskTimeLog&#34; POCO哪里有关系。通过代码时,&#34;任务&#34; &#34; TaskTimeLog&#34;中的属性POCO没有显示错误,因为它现在附加到该线程关键字以及我首先更改名称的原因。

答案 3 :(得分:3)

对于没有在其他答案中找到解决方案的人,当我从某个模型中具有实例的类创建派生类时,我收到此错误。在请求中首次使用我的上下文时发生异常。

这是一个可以重现行为的精简示例。模型在我的上下文中是一个DbSet。

int

这发生在正在进行的工作中。当我将模型属性ExposureDuration更改为输入DurationExtended时,所有内容都重新运行。

答案 4 :(得分:0)

我遇到了同样的问题,找出解决方案花了很长时间。 在我们的例子中,我们创建了一个单独的项目来处理实体,即使包管理器控制台中的默认项目是处理实体的项目,我也需要将此项目设置为默认项目,以使其工作。

我希望这会对别人有所帮助。

答案 5 :(得分:0)

当我声明一个Type类型的变量时,我收到了这个错误 - 这可能是因为数据库不支持这种复杂类型。

当我将其更改为字符串时,错误消失了

public class Sample
{
  public int SampleID {get;set;}
  public Type TypeInfo {get; set;} //This caused the error, 
                                   //because Type is not directly convertible 
                                  //in to a SQL datatype
}

答案 6 :(得分:0)

我遇到了同样的问题并且解决了这样的问题:

模型类错误:

public class UserInformation
{
    public string ID { get; set; }
    public string AccountUserName { get; set; }
    public HttpPostedFileBase ProfilePic { get; set; }
}

模型类没有错误

public class UserInformation
{
    public string ID { get; set; }
    public string AccountUserName { get; set; }
    public string ProfilePicName { get; set; }
}

我将ProfilePic属性类型从HttpPostedFileBase更新为string后,我的问题得以解决。如果您的属性不是stringintdouble或其他一些基本/标准类型,请替换此类属性或更新为SQL更可能接受的类型

答案 7 :(得分:0)

从项目文件中删除行<Generator>EntityModelCodeGenerator</Generator>

查看此https://www.c-sharpcorner.com/UploadFile/5d065a/poco-classes-in-entity-framework/

enter image description here

答案 8 :(得分:0)

我在“ ExpenseModel”中有一些属性,其中之一是...

public virtual Type TypeId {get; set;}

这是由于“类型”属性类型而导致上述相同错误的原因, 所以我更改了
“ Type” =>“ ExpenseType”,它起作用了...:-)

public virtual ExpenseType TypeId {get; set;}

ExpenseModel.cs

public class ExpenseTypes
{
    [Key]
    public int Id { get; set; }
    public string TypeName { get; set; }
    public string Description { get; set; }
}

答案 9 :(得分:0)

在我的情况下,我不得不引用另一个名为IanaTimeZone的模型类,而不是

public virtual IanaTimeZone Timezone { get; set; }

我急于输入:

public virtual TimeZone Timezone { get; set; }

,它编译良好,因为VS认为它是System.TimeZone,但是EF6引发了错误。愚蠢的事情,但花了我一段时间才弄清楚,所以也许这会对某人有所帮助。

答案 10 :(得分:0)

我收到此错误:

  

值不能为null。参数名称: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();

解决方法是添加ToList,如图所示。然后,连接将以代码而不是数据库的形式发生。

答案 11 :(得分:0)

对于其他人来说,这可能会有所帮助,我有一个属性TimeZone(实际的.NET TimeZone对象),这给了我完全相同的错误,不知道为什么,但是会更深入:)