0
對不起,如果我沒有任何意義,我的大腦現在炒。我只是在NHibernate的開始編程,決定搬到流利NHibernate的,因爲自動映射的,但我有一個小麻煩,這裏是關係應該具有:流利NHibernate atutomapping,簡單的問題,額外的領域被添加爲外鍵關係
這裏是關係流利NHibernate的自動映射請注意MemberId被添加到表中:
我猜這是因爲在我的約定中關係設置爲反轉。我需要使關係反轉()或級聯不起作用。這裏是我的約定:
public class HasManyConvention : IHasManyConvention
{
public void Apply(FluentNHibernate.Conventions.Instances.IOneToManyCollectionInstance instance)
{
instance.Key.Column(instance.EntityType.Name + "ID");
//instance.Inverse();
if (instance.Member.GetCustomAttributes(typeof(CascadeAttribute), false).Length <= 0)
{
instance.Cascade.None();
return;
}
var cascadeOption = (CascadeAttribute)instance.Member.GetCustomAttributes(typeof(CascadeAttribute), false)[0];
switch (cascadeOption.CascadeOption)
{
case Enums.CascadeOptions.All:
instance.Cascade.All();
break;
case Enums.CascadeOptions.AllDeleteOrphan:
instance.Cascade.AllDeleteOrphan();
break;
case Enums.CascadeOptions.Delete:
instance.Cascade.All();
break;
case Enums.CascadeOptions.DeleteOrphan:
instance.Cascade.DeleteOrphan();
break;
case Enums.CascadeOptions.None:
instance.Cascade.None();
break;
case Enums.CascadeOptions.SaveUpdate:
instance.Cascade.SaveUpdate();
break;
}
}
}
public class ReferenceConvention : IReferenceConvention
{
public void Apply(FluentNHibernate.Conventions.Instances.IManyToOneInstance instance)
{
instance.Column(instance.Property.Name + "Fk");
if (Attribute.IsDefined(instance.Property.PropertyType.Assembly, typeof(DomainSignatureAttribute)))
instance.UniqueKey("DomainSignature");
else
instance.Index(instance.Property.Name + "Index");
}
}
和我的兩個實體:
public class Member : Entity
{
public Member()
{
Mail = new List<Mail>();
}
[Cascade(Enums.CascadeOptions.All)]
public virtual IList<Mail> Mail
{
get; set;
}
}
public class Mail : Entity
{
public virtual Member Receiver
{
get; set;
}
public virtual Member Sender
{
get; set;
}
public virtual string Subject
{
get;
set;
}
public virtual string Body
{
get; set;
}
}
爲什麼功能NHibernate地圖成員Id時,很明顯,接收器和發送器之間的外鍵的成員表?
@Eitan,他意味着你從來沒有指定如何映射這種關係,所以它只是假定一個標準的外鍵,它按照慣例稱爲MemberId。 – Vadim 2011-03-10 15:21:08
@Eitan:反意味着關係對另一個而言是多餘的,不需要存儲。它不會更改數據庫模型,但如果您想要雙向引用,則應該使用inverse。 – 2011-03-10 15:24:43