linq-to-sql - 如何在 linq for sql 中使用工厂类?

标签 linq-to-sql factory-pattern factory-method

我在我的数据库模型之上有一个模型,并映射了我的存储库中的对象。

但是,显然,我是直接在 GetUsers 中“选择新的”还是“选择 factoryresult”(如下所示)会有所不同。我在运行时收到错误,即 CreateFromDbModel 方法没有转换为 sql (System.NotSupportedException)。

有没有解决的办法?我能以某种方式修补它吗?

想要使用工厂方法的原因是我可能会在其他地方实例化对象并希望将“映射代码”保留在一个地方......

感谢您的任何评论,
安德斯

    public IQueryable<User> GetUsers(bool includeTeams)
    {
        return from u in _db.sc_Players
               where (includeTeams || (!u.aspnet_User.sc_Player.IsTeam))
               select UserFactory2.CreateFromDbModel(u);
    }


    public static User CreateFromDbModel(sc_Player player)
    {
        return new User
                   {
                       Id = player.sc_PlayerID,
                       FirstName = player.FirstName.Trim(),
                       LastName = player.LastName.Trim(),
                       PresentationName = player.FirstName.Trim() + " " + player.LastName.Trim(),
                       LoginName = player.aspnet_User.LoweredUserName,
                       IsTeam = player.IsTeam,
                       Email = player.aspnet_User.aspnet_Membership.Email,
                       Password = player.aspnet_User.aspnet_Membership.Password
                   };
    }

最佳答案

错误几乎解释了这一切。

“方法 CreateFromDbModel 没有转换为 sql (System.NotSupportedException)”

您的 CreateFromDbModel 方法不是 sql 函数。在对象从服务器明确返回给您之前,您的应用程序将无法运行 CreateFromDbModel 函数。在对它们运行 CreateFromDbModel 之前,您很可能必须在查询中调用 ToList() 或类似的东西。

关于linq-to-sql - 如何在 linq for sql 中使用工厂类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1366373/

相关文章:

c++ - 在函数调用中使用模板模板参数

c# - 带有托管扩展框架 (MEF) 的工厂模式

factory - Smalltalk 相当于工厂方法?

javascript - Mithril 组件组合中单独单击增量按钮

sql-server - 如何将大型二进制数据流式传输到 SQL Server

sql - 如何在 Linq to Sql 的子查询中选择 MAX

c# - 只通过存储过程查询数据库是不是一种好方法?

c# - 将枚举与从数据库返回的整数值进行比较的最简单方法是什么

java - 为什么 Hibernate 不需要参数构造函数?

c++ - 通用工厂设计模式的实现