Primero estoy convirtiendo mi proyecto EF POCO en Código. Cambié la plantilla T4, de modo que todas mis entidades usan una clase base, EntityBase
, que les proporciona una funcionalidad común que no está relacionada con la persistencia.Heredar una clase base común en el código EF primero
Si uso [NotMapped]
atributo en EntityBase
, todas las entidades heredan este atributo y me da una The type 'X.X.Person' was not mapped
, para cualquier tipo de trato de usar con EF.
Si uso [NotMapped]
en todas las propiedades de EntityBase
, me sale una excepción EntityType 'EntityBase' has no key defined. Define the key for this EntityType
FYI: Use EF 4.3.1
Editar: parte del código:
[DataContract(IsReference = true)]
public abstract class EntityBase : INotifyPropertyChanged, INotifyPropertyChanging
{
[NotMapped]
public virtual int? Key
{
get { return GetKeyExtractor(ConversionHelper.GetEntityType(this))(this); }
}
//other properties and methods!
}
y luego
[DataContract(IsReference = true), Table("Person", Schema = "PER")]
public abstract partial class Person : BaseClasses.EntityBase, ISelfInitializer
{
#region Primitive Properties
private int? _personID;
[DataMember,Key]
public virtual int? PersonID
{
get{ return _personID; }
set{ SetPropertyValue<int?>(ref _personID, value, "PersonID"); }
}
}
Para estos tw o clases no hay una configuración api fluida.
Ya es abtract. – Alireza
@Alireza, usted habla de la plantilla CodeFirst y T4. ¿Es esto realmente CodeFirst? ¿Puedes mostrar dónde y cómo haces el mapeo de relaciones? Porque usamos una clase abstracta base en CodeFirst, y está funcionando bien ... –
Primero utilicé la base de datos EF y POCO. En ese momento, había cambiado T4 para que todas mis clases heredaran 'EntityBase'. Ahora que cambiamos al código primero, el T4 ya no existe. – Alireza