[英]Fluent Nhibernate Automapping with overrides: Map an unmapped base class collection
[英]Fluent NHibernate automap base class overrides
我有以下基礎 class。
public abstract class BaseEntity
{
public virtual long Id { get; set; }
public virtual DateTime CreateDate { get; set; }
public virtual DateTime? UpdateDate { get; set; }
public virtual bool IsDeleted { get; set; }
public virtual string CreatedBy { get; set; }
}
它是所有實體的基礎 class。
例如,
public class Task : BaseEntity
{
public virtual string Name {get;set;}
}
我有一個初始化程序,
public class Initializer
{
public static AutoPersistenceModel MapEntities()
{
var p = AutoMap
.AssemblyOf<User>(new MyDefaultAutomappingConfiguration())
.IgnoreBase<BaseEntity>()
.UseOverridesFromAssemblyOf<Initializer>()
.Override<BaseEntity>(map =>
{
map.Map(b => b.CreateDate).Not.Nullable().Not.Update();
map.Map(b => b.CreatedBy).Not.Nullable().Length(100);
map.Map(b => b.ModifiedBy).Length(100);
map.Map(b => b.DeletedBy).Length(100);
map.Map(b => b.IsDeleted).Not.Nullable().Default("0");
});
return p;
}
}
當然在數據庫中 - CreateDate 是日期時間,null,CreatedBy 是 nvarchar(255)。
如何配置此 AutoMapper 以獲取從基礎 class 到所有子類的這些映射?
您不能覆蓋基本 class 的映射,因為該映射實際上並沒有被創建。 如果您想繼續使用 Automapper,您可以創建一個約定
public class BaseEntityPropertiesConvention : IPropertyConvention
{
public void Apply(IPropertyInstance instance)
{
if (instance.EntityType.IsSubclassOf(typeof(BaseEntity)))
{
switch instance.Name
{
case "CreatedDate":
instance.Not.Nullable().Not.Update();
break;
case "CreatedBy":
instance.Not.Nullable().Length(100);
break;
//etc...
}
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.