我有一个相当标准的设置只有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; }
}
当我尝试启用代码首次迁移时,我收到以下错误
我已经完成了其他项目的这个过程,从来没有出现过错误。这是连接到本地Sql Server数据库。连接字符串似乎没有问题。我在网上搜索了这个错误,但解决方案似乎回答了与我的设置没有直接关系的问题。
答案 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
后,我的问题得以解决。如果您的属性不是string
,int
,double
或其他一些基本/标准类型,请替换此类属性或更新为SQL更可能接受的类型
答案 7 :(得分:0)
从项目文件中删除行<Generator>EntityModelCodeGenerator</Generator>
。
查看此https://www.c-sharpcorner.com/UploadFile/5d065a/poco-classes-in-entity-framework/
答案 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对象),这给了我完全相同的错误,不知道为什么,但是会更深入:)