【发布时间】:2018-01-16 21:19:27
【问题描述】:
我有以下场景:
public abstract class Account
{
public Guid PKey { get; set; } = Guid.NewGuid();
public string Owner { get; set; }
}
public class CheckingAccount : Account
{
public int Fee { get; set; }
}
public class SavingAccount : Account
{
public double InterestRate { get; set; }
}
我正在使用带有 Table per Hierarchy 的实体框架,因此数据库中将有一个表同时保存 CheckingAccount-Records 和 SavingAccount-Records 以及这个表将包含一个名为 Discriminator 的列,该列分别填充了值“CheckingAccount”或“SavingAccount”。
现在我想将一个主键(Guid)作为我的输入,并找出这个主键所属的记录类型。
我有一个给定的 Guid,想知道这个 Guid 的记录是 CheckingAccount-Record 还是 SavingAccount-Record。
我尝试过这样的事情:
using(MyContext ctx = new Context())
{
CheckingAccount ca = ctx.CheckingAccount.Find(pKey);
SavingAccount sa = ctx.SavingAccount.Find(pKey);
if(ca != null)
{
Console.WriteLine("It's a CheckingAccount!");
}
else if(sa != null)
{
Console.WriteLine("It's a SavingAccount!");
}
}
但是,这会导致 InvalidOperationException:当记录是 SavingAccount 时,它会说
“当请求 CheckingAccount 类型的实体时,找到的实体属于 SavingAccount 类型。”
当我调用第一个 Find() 方法时。
如何找出只给定主键的类型和它可能属于的两种类型?
【问题讨论】:
标签: c# mysql .net entity-framework tph