如何将POCO层与Entity Framework层分开,并且仍然能够向对象添加业务逻辑

时间:2013-09-28 18:43:22

标签: c# entity-framework poco n-tier-architecture

我在这里看到了很多这类问题,但它们要么没有答案,也不是我要问的问题或我需要的细节。

我在下面列出了我的项目的截图,以获得高级别的参考视图。

  1. 在我的“Sample”解决方案中,我目前有一个名为Sample.Data.Model的项目,其中包含我的数据库优先模型的edmx文件。
  2. Following the steps in this MSDN walkthrough, 然后,我将自动生成的POCO类移动到一个单独的项目中,并将其称为Sample.Data.Entities
  3. 然后,我在Sample.Data.Entities项目中引用了Sample.Data.Model项目并修复了所有用法,以便我的项目成功构建。
  4. 我当然需要添加到POCO类中,所以我在PartialClasses项目中为我的部分类添加了一个Sample.Data.Entities文件夹。
  5. 然后这就是我迷路的地方。在较小的(非n层项目)我的edmx文件和部分类在同一个项目中,所以我可以在我的部分类文件中添加我的类对象相关方法,如下所示:

    namespace Sample.Data.Entities
    {
        public partial class User
        {
            public string FullName 
            { 
                get 
                { 
                    return string.Format("{0} {1}", this.FirstName, this.LastName); 
                } 
            }
        }
    
        public User GetUser(int userID)
        {
            using (var dc = new ProntoEntities())
            {
                return (from u in dc.Users where u.ID == userID select u).SingleOrDefault();
            }
        }
    }
    

    然后在MVC项目中我可以做这样的事情......

    User user = new User();
    user = user.GetUser(1);
    

    OR

    User user = new User();
    user.FirstName = "John";
    user.LastName = "Smith";
    user.Update();
    

    但是,我不能在当前的设置中这样做,因为部分类对实体一无所知。

    所以,我的问题是,在我当前的设置中,我对数据进行了“查询”吗?

    另外,如果我要为我的MVC项目制作“ViewModels”,它们应该去哪里?我通常会将它们放在与我的部分类和edmx文件相同的项目中。

    Click to view larger version of image below

    enter image description here

2 个答案:

答案 0 :(得分:1)

  

所以,我的问题是,在我当前的设置中,我对数据进行了“查询”吗?

我认为你应该使用神奇的存储库模式。
例如:http://www.remondo.net/repository-pattern-example-csharp/

  

另外,如果我要为我的MVC项目制作“ViewModels”,那么它们应该去哪里?

由于viewmodel包含连接到其视图的数据,因此我认为您不需要将实体或其部分类放在一起。如果我是你,我只需要放入MVC项目中的Model文件夹。

答案 1 :(得分:1)

您可能有兴趣使用在服务器端使用Entity Framework的开源N-Tier Entity Framework并生成整个基础架构,用于构建基于WCF的n层架构,包括客户端的类似EF的API 。查看框架的用户指南和可在codeplex上下载的示例应用程序。由此产生的解决方案可高度自定义,同时提供有关放置内容的指导。