我有以下场景:
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; }
}
我使用的是实体框架,每个层次结构有一个表,这样数据库中就有一个表同时包含checkingaccount记录和savingaccount记录,这个表将包含一个名为discriminator的列,该列分别填充值“checkingaccount”或“savingaccount”。
现在,我想将一个主键(guid)作为输入,并找出这个主键所属的记录的类型。
我有一个给定的guid,想知道这个guid的记录是checkingaccount记录还是savingaccount记录。
我试过这样的方法:
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()方法时。
我怎样才能找出只有主键的类型和它可能属于的两种类型?
2条答案
按热度按时间j2cgzkjk1#
你用过吗
var
或者object
作为的类型ca
以及sa
?试一试:
vfh0ocws2#
您可以通过基本实体使用ef多态查询
DbSet
. 像这样的事情应该可以做到: