Вот моя реализация.
public partial class Person
{
#region Constructors
public Person()
{
PersonExpirableCredentials = new List<personexpirablecredential>();
}
#endregion Constructors
#region Properties
public int PersonID
{
get;
protected set;
}
public virtual ICollection<personexpirablecredential> PersonExpirableCredentials
{
get;
set;
}
#endregion
}
public abstract class PersonCredential
{
#region Constructors
public PersonCredential()
{
}
#endregion
#region Properties
public int PersonID
{
get;
protected set;
}
public int PersonCredentialID
{
get;
protected set;
}
public System.DateTime WhenEffective
{
get;
set;
}
public Nullable<system.datetime> WhenExpire
{
get;
set;
}
public virtual Person Person
{
get;
set;
}
}
public partial class PersonExpirableCredential : PersonCredential
{
#region Constructors
public PersonExpirableCredential() :
base()
{
}
#endregion
#region Properties
public DateTime? WhenCompleted
{
get;
set;
}
public string CredentialNumber
{
get;
set;
}
#endregion
}
Ниже приведены текущие отображения
internal partial class PersonMapping : EntityTypeConfiguration<person>
{
#region Constructors
public PersonMapping()
{
this.HasKey(t => t.PersonID);
this.ToTable("Person");
}
#endregion
}
internal partial class PersonCredentialMapping : EntityTypeConfiguration<personcredential>
{
#region Constructors
public PersonCredentialMapping()
{
this.HasKey(t => new { t.PersonCredentialID });
this.ToTable("PersonCredential");
this.HasRequired(t => t.Person).WithMany().HasForeignKey(d => d.PersonID);
}
#endregion
}
internal partial class PersonExpirableCredentialMapping : EntityTypeConfiguration<personexpirablecredential>
{
#region Constructors
public PersonExpirableCredentialMapping()
{
this.Map(m =>
{
m.Requires("CredentialCategoryCode").HasValue("Expirable");
});
this.ToTable("PersonCredential");
}
#endregion
}
Вот модель базы данных:
![TPH Diagram](https://i.stack.imgur.com/arAWd.jpg)
Теперь в моем слое доступа к данным, когда я получаю человека и пытаюсь сделать доступ «Person.PersonExpurableCredentials».Выдает ошибку с неверным именем столбца «Person_PersonID».Ниже приведен SQL-запрос, который он генерирует.
exec sp_executesql N'SELECT
[Extent1].[PersonID] AS [PersonID],
''1X0X'' AS [C1],
[Extent1].[PersonCredentialID] AS [PersonCredentialID],
[Extent1].[WhenEffective] AS [WhenEffective],
[Extent1].[WhenExpire] AS [WhenExpire],
[Extent1].[WhenCompleted] AS [WhenCompleted],
[Extent1].[CredentialNumber] AS [CredentialNumber],
[Extent1].[Person_PersonID] AS [Person_PersonID]
FROM [dbo].[PersonCredential] AS [Extent1]
WHERE ([Extent1].[Person_PersonID] IS NOT NULL) AND ([Extent1].[Person_PersonID] = @EntityKeyValue1) AND ([Extent1].[CredentialCategoryCode] = ''Expirable'')',N'@EntityKeyValue1 int',@EntityKeyValue1=3
По какой-то причине EF не может идентифицировать связь между классом Person и подклассом PersonExpurableCredentials.
Помогите, пожалуйста.
Спасибо