2012-03-15 71 views
0

我正在开发一个WCF服务应用程序。它将成为大型系统的一部分。它提供了一些业务逻辑并基于实体框架4.1。我想将应用程序代码分成2层(VS,dll的项目):服务(包含业务逻辑)和DAL。使用实体框架构建应用程序dbContext API问题

我在我的项目

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); 

正如您所看到的一些字段不存在,其他字段正在计算中。 在这种情况下,我有一些关于如何正确构建应用程序的问题。你能用你认为合适的方式使用我提到的一切来编写实现接口方法的代码示例吗?

+0

DataMemeber应该是DataMember – 2012-03-15 15:29:46

+0

“你能写一些例子代码来实现接口方法吗?我用你认为合适的方式使用我提到的所有东西?我认为你应该对你的问题更具体。如果您发布概念性问题 - 请考虑以技术中立的方式提问。看起来你的问题与WCF或EF没什么关系。尝试将问题分解成几个更小更具体的问题。 (我发现这有助于获得答案) – drozzy 2012-10-12 01:34:39

回答

0

尝试使用T4模板

它可以使用T4模板生成的DbContext类,数据传输objecs(后来更多),接口以及所有这两种方法在你那里每个实体在你的模型中:RegsterClass和GetClass。 (这将转化为RegsterStudent,GetStudent,等等每个实体) 然后,您可以使用NuGet上的AutoMapper从Clas映射到ClassModel。

我实现了类似的东西。我不通过任何我的基于dbcontext的实体。我为每个实体使用数据传输对象。因此,一个丰田实体拥有一个ToyotaDto,它具有数据注释并用于所有WCF CRUD操作。当“获取”一个toyotaDto时,我将丰田映射到ToyotaDto并在保存时返回Dto,我将Dto映射到一个实体,当然删除是通过键完成的,所以没有Dto必要。 有several(1)good(2)examples(3)在线,你可以修改以适应,如果你想我可以粘贴我使用的一些模板。

相关问题