c # Превращение записи базы данных linq в экземпляр класса

#c# #asp.net #sql #linq #class

#c# #asp.net #sql #linq #класс

Вопрос:

Я не уверен, что это правильный способ сделать что-то, он кажется довольно затянутым, и я хочу проверить, что это хороший способ превратить результат linq в класс:

  /// <summary>
/// A job header
/// </summary>
public class JobHeader
{
    public int ID { get; set; }
    public int? UserID { get; set; }
    public int? ClientID { get; set; }
    public string JobName { get; set; }
    public string Code { get; set; }
    public DateTime? DateAdded { get; set; }
    public int? StatusID { get; set; }
    public bool UniversalQuantity { get; set; }
    public bool UniversalDelivery { get; set; }
    public bool UniversalDeliveryDates { get; set; }
    public bool BuyerHidden { get; set; }
    public bool FullfillmentDone { get; set; }
    public string TNTCode { get; set; }
    public int? ContactUserID { get; set; }
    public string ContactDepartment { get; set; }
    public string ConactName { get; set; }
    public DateTime? DateSubmitted { get; set; }
    public bool CampaignJob { get; set; }
    public bool UniversalBusinessUnits { get; set; }
    public bool TenderJob { get; set; }
    public Jobs.JobLine[] JobLines { get; set; }

    /// <summary>
    /// Create instance on db record ID
    /// </summary>
    public JobHeader(int? RecordID)
    {
        if (RecordID != null)
        {
            using (MainContext db = new MainContext())
            {
                var q = (from h in db.tblJobHeaders where h.id == RecordID select h).SingleOrDefault();
                if (q != null)
                    LoadByRec(q);
            }
        }
    }
    public JobHeader(tblJobHeader Rec)
    {
        LoadByRec(Rec);
    }

    /// <summary>
    /// Sets properties to match database record
    /// </summary>
    private void LoadByRec(tblJobHeader Rec)
    {
        this.ID = Rec.id;
        this.UserID = Rec.userID;
        this.ClientID = Rec.ClientID;
        this.JobName = Rec.JobName;
        this.Code = Rec.JobCode;
        this.DateAdded = Rec.dateAdded;
        this.StatusID = Rec.statusID;
        this.UniversalQuantity = Rec.uniQty == 1;
        this.UniversalDelivery = Rec.uniDelivery == 1;
        this.UniversalDeliveryDates = Rec.uniDeliveryDates == 1;
        this.BuyerHidden = Rec.buyerHidden == 1;
        this.FullfillmentDone = Rec.fulfilmentDone == 1;
        this.TNTCode = Rec.jobTntCode;
        this.ContactUserID = Rec.JobClientContactID;
        this.ContactDepartment = Rec.JobClient;
        this.ConactName = Rec.JobAccountHandler;
        this.DateSubmitted = Rec.dateSubmitted;
        this.CampaignJob = Rec.isCampaignJob == 1;
        this.UniversalBusinessUnits = Rec.uniBusUnits == 1;
        this.TenderJob = Rec.isTenderJob == 1;
    }
}
  

Во-первых, я знаю, что источник данных неправильно сформирован (пожалуйста, игнорируйте неправильные типы и т.д. и т.п.), На данный момент я мало что могу с этим поделать. Мой запрос, в частности, в отношении того, является ли это лучшим способом создания экземпляра класса из результата Linq? Это становится очень многословным с большим количеством свойств.

Ответ №1:

Ваш подход абсолютно верен, хотя и немного ручной. Я работал над многочисленными проектами, которые используют этот подход для создания объектов C # из запросов к базе данных. Однако существует несколько технологий, которые можно использовать для генерации типов из запросов:

Все вышеперечисленное можно использовать для генерации типов на основе схемы базы данных.