在模型内部存储函数

时间:2019-04-24 14:19:56

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

让我们假设我有一个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等是什么。我是否应该在Model中存储一个函数,例如GetLatestStatus()和其他一些函数或模型应仅具有存储在DB中的属性?如果我无法在内部存储函数,那么编写一些可以与DB调用中的Offer一起使用的有用函数的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

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

我不确定您的问题是什么(或您想要的是什么),但是如果您想要的只是最新状态,则可以执行以下操作:

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

您可以像这样在模型上添加“获取器”:

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

答案 1 :(得分:1)

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

可以在Using partial-classes in Entity Framework with custom properties

阅读更多内容

编写一些有用的函数的最佳方法是什么,我可以将这些函数与通过数据库调用获得的Offer一起使用?

您应遵循存储库模式

enter image description here

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

Entity Framework 4 / POCO - Where to start?