【问题标题】:Property is not supported in LINQ-to-entitiesLINQ-to-entities 不支持属性
【发布时间】:2022-11-17 16:26:13
【问题描述】:

我有问题,我不知道如何解决。我已经看过数百万这样的帖子,但对我没有帮助。

我有这个:

public interface IInterface
{
    int Order { get; set; }
}

public abstract class AbstractClass { }

和两个实现

public class FirstImplementation : AbstractClass, IInterface
{
    [Column(nameof(IInterface.Order))]
    public int Order { get; set; }
}

public class SecondImplementation : AbstractClass, IInterface
{
    [Column(nameof(IInterface.Order))]
    public int Order { get; set; }
}

和其他实现,但它们没有 Order 属性。

public class MyContext
{
    public DbSet<AbstractClass> AbstratClass { get; set; }
}

我不能将属性 Order 放在 AbstractClass 中,导致其他逻辑并且因为其他实现没有该属性,我尝试使用 ColumnAttribute 来解决这些问题。

但是当我尝试这些查询时,它抛出一个异常:

System.NotSupportedException: 'LINQ to Entities 不支持指定的类型成员 'Order'。仅支持初始值设定项、实体成员和实体导航属性。

查询:

myContext.AbstractClass
         .OfType<FirstImplementation>()
         .Concat<IInterface>(myContext.AbstractClass
                                      .OfType<SecondImplementation>())
         .Max(x => x.Order);

目标应该是执行Max和IQueryable&lt;T&gt;

我在 stackoverflow 中尝试了一些解决方案,但没有用

【问题讨论】:

  • 百万帖子?你是认真的?
  • 您的问题似乎是您认为关系数据库可以在无法继承时以某种方式进行继承。如果您需要分离第一个和第二个实现,那么您将需要单独的表,从而为两者分离 DbSet。
  • @juharr“你认为关系数据库可以在它不能继承的时候以某种方式进行继承”——那是误传。无论如何,EF Core does support a variety of class-hierarchy-to-table mapping strategies - 尽管我同意使用它们中的任何一个都是一个非常糟糕的主意。

标签: c# entity-framework linq iqueryable


【解决方案1】:

您的上下文仅包含 AbstractClass 的 DbSet,但不包含 FirstImplementation。根据 this OfType&lt;DerivedType&gt; 仅适用于实体框架,如果 DerivedType 为 DbContext 所知(请参阅 smitpatel 的第一条评论)。

【讨论】:

  • 我稍后也会尝试单独DbSet。然而问题出在Max方法,而不是OfType,因为如果我运行这些查询:myContext.AbstractClass.OfType&lt;FirstImplementation&gt;().Max(x =&gt; x.Order),这些查询有效并返回结果。只有在 Concat 抛出异常之后
  • 这些查询也有效:myContext.AbstractClass.OfType&lt;FirstImplementation&gt;().AsQueryable&lt;IInterface&gt;().Max(x =&gt; x.Order) 所以我不明白是什么问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多