13

任何人都可以伸出援助之手吗?我一直在观看 MVC 店面的视频,并使用这些技术(即 DDD、存储库模式)创建了自己的网站,但我希望使用实体框架。

在接口中它返回 IQueryable 但使用实体框架我应该返回 ObjectQuery 吗?- 我将使用 LINQ。

同样在storedfront示例中,它是这样的: IQueryable<Category> GetCategories();

同样在 MVC 商店中,Category 类是一个构建的实体类(标准类),但是使用 Entity Framework,这些类是在对象上下文中预构建的——不是吗?

所以我应该需要建造它们吗?

我有点困惑。如果有人有任何有用的示例或代码,那将非常有帮助。

正如我所说,我已经使用 linq2sql 观看了 MVC 店面中的视频,但我真的很想使用实体框架。

有任何想法吗?

谢谢

铁匠铺

4

6 回答 6

9

让我一次一个地回答你的问题:

您的存储库返回 IQueryable<T>,而不是ObjectQuery。原因是存储库模式的全部目的是抽象出数据存储的细节。这允许您在对控制器进行单元测试时执行诸如替换模拟存储库之类的操作。如果您让存储库返回 ObjectQuery,那么您并没有抽象出实体框架。另一种说法是,您的存储库的用户不应该尽可能多地知道它是执行 O/R 映射的实体框架。

为了在 Stack Overflow 的段落文本中使用大于和小于符号,您必须像在 HTML 中一样对它们进行转义,即:

&lt;

您不需要在代码块中执行此操作;在代码块中,您只需键入小于/大于符号。

于 2009-03-30T13:14:43.497 回答
6

如果您在http://www.asp.net/learn/mvc/#MVC_SampleApp站点中看到联系人管理器教程,也许他们使用了存储库模式和实体框架。

于 2009-03-30T01:14:57.877 回答
5

几周前我开始像您一样,您会发现使用 EF 非常容易。我的项目很小,所以我使用 EF 生成的实体作为我的模型类,您可以使用部分类向它们添加自己的逻辑。

这是我的一个存储库的一个简单方法,例如:

    /// <summary>
    /// Finds a user by it's credentials
    /// </summary>
    /// <param name="oUser"></param>
    /// <returns></returns>
    public User FindByCredentials(string username, Byte[] password)
    {
        User user = null;

        if (!Validators.IsStringEmptyOrNull(username))
        {
            user = this.FindByCredentialsQuery(username, password).FirstOrDefault<User>();
        }

        return (Validators.IsNull(user)) ? new User() : user;

    }


    /// <summary>
    /// Finds a user by it's credentials
    /// </summary>
    /// <param name="username"></param>
    /// <param name="password"></param>
    /// <returns></returns>
    protected IQueryable<User> FindByCredentialsQuery(string username, Byte[] password)
    {
        var query = from Users in this.UserDataContext.Users
                    where
                        (Users.Username == username) &&
                        (Users.Password == password) &&
                        (Users.Enabled == true)
                    select Users;


        return query;
    }

请注意,我仅在存储库内使用 IQueryable,并且仅返回请求的实体列表。这样我可以控制对 DB 的查询始终在 Repo 内执行。

于 2009-05-04T19:06:28.957 回答
3

一个新的 MVC 教程系列包括一个存储库示例,其中包括带有参数的方法,这些方法允许您指定过滤器、排序等,而不返回 IQueryable: http ://www.asp.net/entity-framework/tutorials/implementing-the -repository-and-unit-of-work-patterns-in-an-asp-net-mvc-application

于 2011-05-11T16:37:23.030 回答
3

一个很好的实体框架通用存储库(活动): http: //www.codeproject.com/KB/database/ImplRepositoryPatternEF.aspx

现在我使用这个作为应用程序框架(包括一个完美的存储库) http://efmvc.codeplex.com/

请大喊一声;)

于 2010-12-01T07:21:44.793 回答
2

我不确定这是否正确,但我正在使用 L2E,使用AutoMapper 3rd 方工具将生成的对象转换为域对象。

于 2009-05-04T18:32:30.023 回答