我正在使用 Entity Framework 6 Code First、c#4.0 和 Visual Studio 2012。以下是代码片段。
我有一个基础抽象类:
public abstract class Person
{
public int PersonID { get; set; }
public String Name { get; set; }
}
我从中得出三个实体:
public class Contact : Person
{
public Nullable<int> NHSTrustID { get; set; }
public virtual NHSTrust NHSTrust { get; set; }
}
public class User : Person
{
public int NHSTrustID { get; set; }
public virtual NHSTrust NHSTrust { get; set; }
}
public class Notifier : Person
{
public int NotifierTypeID { get; set; }
public virtual NotifierType NotifierType { get; set; }
}
实体声明为:
public DbSet<Person> Persons { get; set; }
public DbSet<User> Users { get; set; }
public DbSet<Contact> Contacts { get; set; }
public DbSet<Notifier> Notifiers { get; set; }
这样 Persons 实体也可以是查询。
一个person
可能属于三个派生实体中的任何一个的人。我需要知道 aperson
是否具有属性NHSTrust
。(Users
必须有NHSTrust
, 因为Contacts
它是可选Notifiers
的并且没有 NHS 信托。
我可以看到如何使用大量代码来做到这一点,但是有没有一种优雅的方式来做到这一点?
更新 我目前的“解决方案”是:
var tempPerson = dbContext.Persons.Find(personID);
NHSTrust nHSTrust = null;
if (tempPerson is Contact)
{
nHSTrust = dbContext.Contacts.Find(personID).NHSTrust;
}
else if (tempPerson is User)
{
nHSTrust = dbContext.Users.Find(personID).NHSTrust;
}
if (nHSTrust != null) { // do something}
有没有办法通过一次访问该数据库来做到这一点。