Создание приложения с использованием Entity Framework dbContext API - PullRequest
0 голосов
/ 15 марта 2012

Я разрабатываю приложение службы WCF. Это будет частью большой системы. Он предоставляет некоторую бизнес-логику и основан на платформе Entity 4.1. Я хочу разделить код приложения на 2 уровня (проекты в VS, DLL): служба (которая содержит бизнес-логику) и DAL.

У меня есть такая модель базы данных в моем проекте

ClassModel
classID : int, PK
classIdentity : string
teacherName : string
statisticInfo : int
isRegistered : bool


StudentModel
studentID : int, PK
studentIdentity : string
classID : int, FK

Для этого я генерирую код с использованием шаблонов dbContext и получаю:

public partial class ClassModel
{
    public ClassModel()
    {
        this.Student = new HashSet<StudentModel>();
    }
    public int ClassID { get; set; }
    public string ClassIdentity { get; set; }
    public string TeacherName  { get; set; }
    public int StatisticInfo { get; set; }
    public bool IsRegistered { get; set; }

    public virtual ICollection<TerminalModel> Terminal { get; set; }
}

public partial class StudentModel
{
    public int StudentID { get; set; }
    public string StudentIdentity { get; set; }
    public bool IsRegistered { get; set; }

    public virtual ClassModel Class { get; set; }
}

Я хочу раскрыть только часть этой информации через сервис, поэтому у меня есть другая модель в качестве контракта данных:

[DataContract]
public class Clas{
    [DataMember]
    public string ClassIdentity {get;set;}
    [DataMember]
    public string TeacherName {get;set;}
    [DataMember]
    public string ClassMark {get;set;} //computed from statisticInfo
    [DataMember]
    public int NumberOfStudents {get;set;} //amount of students in this class
}

И моя часть моего Сервисного Контракта:

[OperationContract]
public void RegsterClass(Clas clas); //(if given clas does not exists adds it and) sets its isRegistered column to True
[OperationContract]
public Clas GetClass(string classIdentity);

Как видите, некоторые поля отсутствуют, другие вычисляются. В таком случае у меня есть некоторые опасения по поводу того, как правильно построить приложение. Не могли бы вы написать пример кода, который реализует методы интерфейса, используя все, что я упомянул так, как вы считаете правильным?

1 Ответ

0 голосов
/ 11 октября 2012

Попробуйте использовать шаблоны T4

Можно использовать шаблоны T4 для генерации классов dbContext, объектов передачи данных (подробнее об этом позже), интерфейса, а также всех двух методов, которые у вас есть для этого.каждая сущность в вашей модели: RegsterClass и GetClass.(это будет переводиться в RegsterStudent, GetStudent и т. д. для каждой сущности). Затем вы можете использовать AutoMapper в NuGet для отображения из Clas в ClassModel.

Я реализовал нечто подобное.Я не передаю ни один из моих объектов на основе dbcontext по проводам.Я использую объекты передачи данных для каждой сущности.Таким образом, компания Toyota имеет ToyotaDto, который имеет аннотации данных и используется для всех операций CRF WCF.Когда я «получаю» toyotaDto, я сопоставляю Toyota с ToyotaDto и возвращаю Dto, при сохранении я сопоставляю Dto с сущностью, конечно, удаление выполняется по ключу, поэтому Dto не требуется.Есть несколько (1) хорошо (2) примеров (3) онлайн, которые вы можете изменить, чтобы удовлетворить, и если вы хотите, я могу вставить в некоторые изшаблоны, которые я использую.

...