我使用EF Core 1创建ASP.NET Core 1应用程序。我有两个类具有一对多关系,如下所示
public class Country: EntityBase
{
public string Name { get; set; }
// fields for relations
public IQueryable<Singer> Singers { get; set; }
}
public class Singer : EntityBase
{
public string Name { get; set; }
// fields for relation
public int CountryId { get; set; }
public virtual Country Country { get; set; }
}
他们的映射
public class SingerMap
{
public SingerMap(EntityTypeBuilder<Singer> entityBuilder)
{
entityBuilder.HasKey(x => x.Id);
entityBuilder.Property(x => x.Id).ValueGeneratedOnAdd();
entityBuilder.Property(x => x.Name).HasMaxLength(500);
//relational fields
entityBuilder.HasOne(x => x.Country).WithMany(x => x.Singers).HasForeignKey(x => x.CountryId);
}
}
public class CountryMap
{
public CountryMap(EntityTypeBuilder<Country> entityBuilder)
{
entityBuilder.HasKey(x => x.Id);
entityBuilder.Property(x => x.Id).ValueGeneratedOnAdd();
entityBuilder.Property(x => x.Name).HasMaxLength(500);
}
}
我为这些实体创建了通用的存储库模式。包含属性的功能如下
public virtual IEnumerable<T> AllIncluding(params Expression<Func<T, object>>[] includeProperties)
{
IQueryable<T> query = _context.Set<T>();
foreach (var includeProperty in includeProperties)
{
query = query.Include(includeProperty);
}
return query.AsEnumerable();
}
我称这种方法
[HttpGet]
public JsonResult GetAllForIndex()
{
var result = Service.AllIncluding(x => x.Country);
return Json(result);
}
在此之后我收到此错误
导航属性的类型&#39; Singers&#39;在实体类型&#39;国家&#39; 是真的可以&#39; IQueryable&#39;为此无法创建 具体实例。在使用之前初始化属性,添加一个 public参数类型的无参数构造函数,或者使用可以的类型 被分配一个HashSet&lt;&gt;或列表&lt;&gt;。
我对解决方案一无所知。 请帮忙。
答案 0 :(得分:2)
public IQueryable<Singer> Singers { get; set; }
应该是
public List<Singer> Singers { get; set; }
Exception消息几乎说明了什么是错误的,应该更改为什么。您几乎可以使用源自HashSet<>
或List<>
。