【问题标题】:Building application with Entity framework dbContext API issues使用实体框架 dbContext API 问题构建应用程序
【发布时间】:2012-03-15 14:32:39
【问题描述】:

我正在开发 WCF 服务应用程序。它将成为大型系统的一部分。它提供了一些业务逻辑,基于Entity framework 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
}

还有我的 ServiceContract 部分:

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

如您所见,有些字段不存在,而其他字段正在计算中。 在这种情况下,我对如何正确构建应用程序有些担心。您能否以您认为正确的方式使用我提到的所有内容编写实现接口方法的示例代码?

【问题讨论】:

  • DataMember 应该是 DataMember
  • “您能否编写示例代码,以您认为合适的方式使用我提到的所有内容来实现接口方法?”我认为你的问题应该更具体。如果您要发布概念性问题 - 请考虑以技术中立的方式提出问题。您的问题似乎与 WCF 或 EF 没有什么特别的关系。试着把问题分解成几个更小更具体的问题。 (我发现这有助于获得答案)

标签: wcf entity-framework entity-framework-4.1 n-tier-architecture dbcontext


【解决方案1】:

尝试使用 T4 模板

可以使用 T4 模板来生成 dbContext 类、数据传输对象(稍后会详细介绍)、接口以及模型中每个实体的所有两种方法:RegsterClass 和 GetClass。 (这将转换为每个实体的 RegsterStudent、GetStudent 等) 然后你可以在 NuGet 上使用 AutoMapper 从 Clas 映射到 ClassModel。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多