c# - 使用 Linq-To-Entities 时可以创建嵌套类吗?

标签 c# entity-framework linq-to-entities

我还在学习 Entity Framework 和 Linq-To-Entities,我想知道这种声明是否可行:

using (var context = new MyEntities())
{
    return (                    
        from a in context.ModelSetA.Include("ModelB")
        join c in context.ModelSetC on a.Id equals c.Id
        join d in context.ModelSetD on a.Id equals d.Id
        select new MyModelA()
        {
            Id = a.Id,
            Name = a.Name,
            ModelB = new MyModelB() { Id = a.ModelB.Id, Name = a.ModelB..Name },
            ModelC = new MyModelC() { Id = c.Id, Name = c.Name },
            ModelD = new MyModelD() { Id = d.Id, Name = d.Name }
        }).FirstOrDefault();
}

我必须使用一个预先存在的数据库结构,它不是很优化,所以我无法在没有大量额外工作的情况下生成 EF 模型。我认为简单地创建我自己的模型并将数据映射到它们会很容易,但我不断收到以下错误:

Unable to create a constant value of type 'MyNamespace.MyModelB'. Only primitive types ('such as Int32, String, and Guid') are supported in this context.

如果我删除 ModelB、ModelC 和 ModelD 的映射,它会正确运行。我无法使用 Linq-To-Entities 创建新的嵌套类吗?还是我写错了?

最佳答案

您所拥有的将适用于 POCO(例如, View 模型)。 Here's an example.您只是不能以这种方式构建实体。

另外,joingenerally inappropriate for a L2E query.请改用实体导航属性。

关于c# - 使用 Linq-To-Entities 时可以创建嵌套类吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7615241/

相关文章:

c# - C# 中推荐的 IRepository 和 IRepository<T> 接口(interface)

c# - 删除相关实体时出现“集合已修改”错误

c# - 我将如何使用 Linq 方法语法获得独特的结果

c# - 您能否以编程方式查看 USB 设备在 Windows 中请求的安培数?

c# - 比较两个日期时间,一个来自 Datetimepicker,一个来自 MySql 数据库

c# - 如何使用带有 Entity Framework Code First 的 Postgresql 的串行字段

entity-framework - TransactionScope 如何保证跨多个数据库的数据完整性?

c# - IHttpActionResult 与异步任务<IHttpActionResult>

linq - Entity Framework T-Sql "having"等效

c# - 我的 EF 查询有什么问题?