【问题标题】:Storing functions inside model在模型中存储函数
【发布时间】:2019-04-24 14:19:55
【问题描述】:

假设我有一个班级Offer,它是:

public class Offer
{
    [Key]
    public int ID { get; set; }
    //...
    public virtual List<OfferEventManager> EventManagers { get; set; }
    public virtual List<EventDay> EventDays { get; set; }
    public virtual List<OfferStatus> OfferStatuses { get; set; }
    public virtual List<EstimatedCost> EstimatedCosts { get; set; }
    public virtual List<Payment> Payments { get; set; }
}

我必须做一些检查,例如有人想向客户发送Offer,但首先Offer 必须是特定的OfferStatus,例如EventDaysEstimatedCost。现在让我们假设我不仅要在一个函数中检查它,而且还要在更多函数中检查它,所以我需要知道最新的OfferStatus 等是什么。我应该在模型中存储一个函数吗? GetLatestStatus() 和其他一些函数或模型应该只有存储在数据库中的属性?如果我不能在里面存储函数,那么编写一些可以与Offer 一起使用的有用函数的最佳方法是什么?

【问题讨论】:

    标签: c# asp.net-mvc entity-framework function model


    【解决方案1】:

    您可以通过部分类public partial class Offer在模型类中添加方法

    可以在Using partial-classes in Entity Framework with custom properties阅读更多内容

    编写一些有用的函数的最佳方法是什么?这些函数可以与从 DB 调用中获得的 Offer 一起使用?

    你应该遵循存储库模式

    更多参考https://www.c-sharpcorner.com/article/creating-web-api-with-repository-pattern-and-dependency-injection/

    Entity Framework 4 / POCO - Where to start?

    【讨论】:

      【解决方案2】:

      通常,EF 中的模型应该是数据库的直接模型(可能带有一些虚拟映射)。

      我不完全确定您的问题是什么(或您想要什么),但如果您想要的是最新状态,您可以这样做:

      // assume that 'offer' is an Offer from the DB 
      var latestStatus = offer.OfferStatuses.OrderByDescending(x => x.Timestamp).First();
      

      您可以像这样在模型上添加“getter”:

      public class Offer
      {
          // Getter method
          public OfferStatus GetLatestStatus
          {
              get { return OfferStatuses.OrderByDescending(x => x.Timestamp).FirstOrDefault(); }
              set { ; }
          }  
      }
      

      【讨论】:

      • 这就是我想在模型中存储的内容 public OfferStatus GetLatestStatus() { return offer.OfferStatuses.OrderByDescending(x => x.Date).First(); }
      猜你喜欢
      • 1970-01-01
      • 2017-03-19
      • 1970-01-01
      • 2015-04-07
      • 1970-01-01
      • 1970-01-01
      • 2019-08-09
      • 2020-11-12
      • 2014-06-22
      相关资源
      最近更新 更多