Извините, если я не вижу смысла, мой мозг сейчас зажжен.Я только начал программировать в NHibernate, решил перейти на Fluent Nhibernate из-за автоотображения, но у меня возникли небольшие проблемы, вот отношение, которое должно быть:
![enter image description here](https://i.stack.imgur.com/lNeJO.png)
Здесьэто отношение, выполненное автоматическим отображением Fluent Nhibernate, обратите внимание, что MemberId добавлен в таблицу: ![enter image description here](https://i.stack.imgur.com/9Bitt.png)
Я предполагаю, что это потому, что в моих соглашениях отношения установлены как обратные.Мне нужно было сделать отношения обратными (), иначе каскады не работали.Вот мои соглашения:
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 отображает MemberId, когда очевидно, что Receiver и Sender являются внешними ключами для таблицы участника?