在Entity Framework中选择必需的包含表

时间:2012-10-09 09:18:55

标签: .net linq entity-framework

我正在使用标准化数据库上的EF。

对于我的商品实体,我有以下表格结构:

优惠

加上:

PostType

Offers_SitePost或Offers_CommunityPost

加上:

OfferType

Offers_VoucherCode或Offers_Deal或Offers_Sale

因此,完整报价将由要约中的明确条目加上其中一个PostType表中的条目和其中一个OfferType表中的条目组成。

我从offer表中了解到,其他哪些表应该包含数据。我正在使用像IsSitePost这样的属性来做到这一点。

我正在尝试找出获得单一要约和要约列表的最佳方法来获取必要的数据。显然,我可以包括所有表格,但我怀疑这将是最有效的。

以下是我正在处理单个优惠的代码:

    public static Offer GetById2(int ID)
    {
        ID.ThrowDefault("ID");

        var r = new CrudRepo<Offer>(Local.Items.Uow.Context);

        var offer = r.Find(o => o.OfferId == ID);

        // if is site post Include("SiteOffers")
        // else is community post Include("CommunityOffers") etc

        return offer.SingleOrDefault();
    }

有人可以就实现这一目标的最佳方式提出建议吗?

2 个答案:

答案 0 :(得分:1)

我建议查询数据库以查找您要查找的优惠

看看这个主题: Entity Framework 4: Selecting Single Record

答案 1 :(得分:0)

您需要在查找之前放置.Include,因为include扩展了基础表源,而不是对象类型。这还取决于您如何实现CrudRepo以及它返回的内容,以了解您的存储库是否知道如何处理Include本身。

public static Offer GetById2(int ID)
 {
     ID.ThrowDefault("ID");
      var r = new CrudRepo<Offer>(Local.Items.Uow.Context);
      if (IsSitePost)
         r = r.Include("SiteOffers");
      else
         r = r.Include("CommunityOffers");
      var offer = r.Find(o => o.OfferId == ID);
      return offer.SingleOrDefault();
 }