我有一个抽象类
public abstract class Document
{
public int DocumentID {get; set;}
}
和派生类
public class DoctorDocument : Document{
public string DoctorName {get;set;}
}
我正在使用Fluent Auto Mapping,
我不需要为Document创建一个表,但我需要每个派生类将DocumentID作为主键。
mappings.IgnoreBase<Document>();
mappings.AddEntityAssembly(typeof(DoctorDocument).Assembly);
mappings.Setup(c=>c.FindIdentity = type.Name == type.DeclaringType.Name + "ID";);
但它仍然无法找到ID并告诉我DoctorDocument没有ID。 但当我做出以下覆盖时,它起作用了:
public class DoctorDocumentMap: IAutoMappingOverride<DoctorDocument>
{
public void Override(AutoMapping<DoctorDocument> mapping)
{
mapping.Id(x => x.Id, "DocumentID").GeneratedBy.Identity();
}
}
我怎么能告诉自动化为所有实体做这个?尤其是GeneratedBy.Identity();
答案 0 :(得分:2)
覆盖默认自动播放器配置可能会有所帮助。
这样的事可能有用:
public class MyAppAutoConfiguration : DefaultAutomappingConfiguration
{
public override bool IsId(Member member)
{
return "DocumentID" == member.Name;
}
}
配置可以是这样的:
var cfg = new MyAppAutoConfiguration();
var autoPersistenceModel = AutoMap.AssemblyOf<Person>(cfg).IgnoreBase<Document>();
ISessionFactory sessionFactory = Fluently.Configure()
.Database(OracleClientConfiguration.
Oracle10.ConnectionString(
ConfigurationManager.ConnectionStrings["OracleConn"].ConnectionString))
.Mappings(m =>
m.AutoMappings
.Add(autoPersistenceModel))
.BuildSessionFactory();