【问题标题】:Entity Framework Interfaces实体框架接口
【发布时间】:2015-02-07 18:09:24
【问题描述】:

所以,我正在做一个与游戏相关的项目。我现在有三个项目,Web、Data、Data.EF。我希望 Web 对 Data.EF 中的具体类一无所知,而只引用 Data 中的接口。我遇到的问题是我有两个类 Dungeon 和 AvailableDay。 AvailableDay 有两个重要的成员。工作日是DayOfWeekIEnumerable<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


【解决方案1】:

MSDN: Requirements for Creating POCO Proxies:

表示关系“多”端的导航属性必须返回实现 ICollection 的类型,其中 T 是关系另一端的对象类型。 "

所以改变属性类型:

public virtual Collection<Dungeon> Dungeons { get; set; }

【讨论】:

  • 我尝试了 Collection 和 ICollection,但仍然得到相同的错误。
  • @ScubaSteve 它必须是模型类型,所以Dungeon。如果您不想公开实体类型,则必须(自动)将它们映射到您的数据模型。
  • by (auto)map,你是说我的 Web 项目中的 IoC 吗?
猜你喜欢
  • 2018-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多