【发布时间】: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<T>我在 stackoverflow 中尝试了一些解决方案,但没有用
【问题讨论】:
-
百万帖子?你是认真的?
-
您的问题似乎是您认为关系数据库可以在无法继承时以某种方式进行继承。如果您需要分离第一个和第二个实现,那么您将需要单独的表,从而为两者分离 DbSet。
-
@juharr“你认为关系数据库可以在它不能继承的时候以某种方式进行继承”——那是误传。无论如何,EF Core does support a variety of class-hierarchy-to-table mapping strategies - 尽管我同意使用它们中的任何一个都是一个非常糟糕的主意。
标签: c# entity-framework linq iqueryable