0
我想用映射機制,根據財產的屬性標記,像這樣:如何根據屬性爲FluentNHibernate創建AutoMap功能?
[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field, AllowMultiple = false, Inherited = true)]
public class DomainSignatureAttribute : Attribute { }
public class SomeThing {
[DomainSignature]
public virtual string SomePropertyForMapping {get;set;}
[DomainSignature]
public virtual int OtherPropertyForMapping {get;set;}
public virtual string OtherPropertyWithoutMapping {get;}
}
在類映射兒童
所以我想實現這個方法,映射所有屬性,通過DomainSignatureAttribute屬性標記:
protected void MapPropertiesWithStandartType()
{
foreach (PropertyInfo property in typeof(T).GetProperties())
{
if (property != null)
{
object[] domainAttrs = property.GetCustomAttributes(typeof (DomainSignatureAttribute), true);
if (domainAttrs.Length > 0)
Map(x => property.GetValue(x, null));
}
}
}
但Linq存在一個小問題。當FluentNHibernate構建映射(Cfg.BuildSessionFactory())時,它與
嘗試在添加屬性'GetValue'時添加屬性。
異常。由於我不想要,我需要重建Linq表達式:x => property.GetValue(x, null)
爲正確的形式。
請不要建議使用AutoMap功能,也不要建議使用手動映射。
您可以使用自動映射+自動映射重寫(IAutoMappingOverride),然後爲不想映射的屬性定義mapping.IgnoreProperty(...)。 – VahidN