【发布时间】:2015-02-07 18:09:24
【问题描述】:
所以,我正在做一个与游戏相关的项目。我现在有三个项目,Web、Data、Data.EF。我希望 Web 对 Data.EF 中的具体类一无所知,而只引用 Data 中的接口。我遇到的问题是我有两个类 Dungeon 和 AvailableDay。 AvailableDay 有两个重要的成员。工作日是DayOfWeek 和IEnumerable<IDungeon> Dungeons,这是当天可用地牢的“列表”。我遇到的问题是我不断收到此错误:
导航属性“Dungeons”不是“AvailableDay”类型的声明属性。验证它没有被明确地从模型中排除,并且它是一个有效的导航属性。
我的 AvailableDay 映射类是:
internal class AvailableDayMapping : EntityTypeConfiguration<AvailableDay>
{
public AvailableDayMapping()
{
this.ToTable("AvailableDays", "dbo");
this.HasKey(t => t.ID);
this.HasKey(t => t.DungeonID);
this.HasRequired(t => t.Dungeons).WithMany().HasForeignKey(t => t.DungeonID);
this.Property(t => t.Weekday);
}
}
AvailableDay 类:
public class AvailableDay : IAvailableDay
{
public int ID { get; set; }
public int DungeonID { get; set; }
public virtual IEnumerable<IDungeon> Dungeons { get; set; }
public DayOfWeek Weekday { get; set; }
}
我正在尝试通过以下方式查询它:
public async Task<IEnumerable<IAvailableDay>> GetAvailableDaysAsync()
{
return await _Context.AvailableDays
.Include(t => t.Dungeons)
.GroupBy(t => t.Weekday).SelectMany(t => t).ToListAsync();
}
如何在只允许 Web 通过接口访问的情况下提取 Dungeon 数据列表?
【问题讨论】:
-
尝试使用语法 _Context.AvailableDays.Include("Dungeons").GroupBy... 不是说你的方式是错误的,我只是从未见过包含这种方式。
-
@Tim
using System.Data.Entity让您致电Include()with a property expression。 -
@CodeCaster 感谢您指出这一点。以前从未这样做过。
标签: c# linq entity-framework interface ienumerable