将POCO实体转换为业务实体

Nao*_*aor 1 .net entity-framework business-objects poco entity-framework-4

我愿意将实体框架集成为我的数据层.

我使用本教程跟踪文章并生成了poco实体:http://blogs.msdn.com/b/adonet/archive/2010/01/25/walkthrough-poco-template-for-the-entity-framework.aspx

我有自己的业务对象.这是我的业务对象Brach:

public class Branch
{
    public long BranchId { get; private set; }
    public string BranchName { get; set; }
    public string BranchCode { get; set; }

    public Branch() { }

    public void InsertBranch(Guid companyId)
    {
        using (var ctx = new Entities.Entities())
        {
            var branch = new T_STF_BRANCH() //This is generated POCO object
            {
                company_id = companyId,
                branch_name = BranchName,
                branch_code = BranchCode
            };
            ctx.T_STF_BRANCH.AddObject(branch);
            ctx.SaveChanges();
        }
    }

    public static IList<Branch> GetBranchesList(Guid companyId, long? branchId,
        string branchName)
    {
        using (var ctx = new Entities.Entities())
        {
            var branchs = ctx.T_STF_BRANCH.Where(x =>
                x.is_deleted == false &&
                (branchId == null || x.branch_id == branchId) &&
                (branchName == null || x.branch_name.Contains(branchName))).ToList();
        }
        //HERE I NEED SOMEHOW CONVERT THE POCO ENTITIES INTO MY BUSINESS ENTITIES...
    }
}
Run Code Online (Sandbox Code Playgroud)

我不知道如何将POCO实体转换为我的业务实体.
我应该在哪里将POCO转换为POCO?

Lad*_*nka 10

恕我直言这太复杂了.为什么你有POCO实体用于持久性和单独的对象来处理加载到POCO实体的数据?听起来你的应用程序已经过结构化了.

ORM表示对象关系映射.它意味着关系世界和对象世界之间的映射.通常它也可以转换为数据库和业务对象之间的映射.因此,您应该将POCO对象用作业务对象.这就是使用POCO的全部含义.如果您不想将它们用作业务对象,则不需要它们,您可以直接使用默认实体对象.

如果要将POCO用作业务对象,只需让EF为您生成这些POCO,并为定义方法的每个POCO添加部分类.

顺便说一句.您的业​​务对象实际上看起来像Active Record模式的实现.如果您想使用这种模式,也许您应该检查基于NHibernate顶部的Windsor Active Record.

编辑:

好.您可以使用类而不是生成的POCO实体.

一种方法是放弃EFv4和EDMX并检查新的EFv4.1及其新的流畅API(也称代码优先)以进行映射.这对于单独的问题是完整的,或者只是在SO上使用搜索.

你也可以用EDMX做到这一点.您必须遵循一些基本规则来完成这项工作,因为整个过程是通过命名约定来完成的.因为您已经有类,所以必须在EDMX文件中修改它,以便概念模型与业务对象相同:

  • 必须保存或加载的每个业务对象必须在概念模型中具有实体
  • 实体必须与业务对象具有相同的名称.您还必须在属性窗口中正确设置实体(抽象,访问级别和基本实体必须与业务对象中的相同)
  • 业务对象中的每个存储属性都必须在概念模型中的实体中具有属性.您必须再次正确设置每个属性(getter和setter辅助功能,类型,可空等).

EDMX由三层组成:

  • SSDL - 数据库的描述.这几乎总是生成,您无法直接在设计器中修改它.
  • CSDL - 必须与业务对象相同的实体的描述.这是您在设计器中修改的内容.您可以根据需要重命名字段.
  • MSL - SSDL和CSDL之间的映射.如果在设计器中的任何实体上打开上下文菜单,您将看到表映射.它将打开一个窗口,其中定义了CSDL和SSDL之间的映射.

这些是基本规则,但由于您已经拥有业务对象,因此您很可能会发现难以映射它的情况.最好的方法就是要求提出具体问题.它很可能是关于一些复杂的属性,导航属性或继承.