1

У меня есть следующий класс с Словарем:варианты NHibernate MappingByCode Карта Каскад

public class Entity1 
{ 
    public Dictionary<Entity2,Entity3> Targets { get; set; } 
} 

сопоставленного в настоящее время с помощью этого кода:

Map(x => x.Targets, 
     m => m.Key(k => k.Column("Entity1ID")), 
     km => km.ManyToMany(mtm => mtm.Column("Entity2ID")), 
     vm => vm.ManyToMany(mtm => mtm.Column("Entity3ID"))); 

Я искал способ, чтобы установить другой вариант каскада к KeyMapping, а другой - ValueMapping. Но я могу найти каскад только в главном «Сборнике карт»

Я хочу, чтобы у ключа был Cascade.None - потому что другая часть приложения управляет этим сущностью, а значение имеет Cascade.AllDeleteOrphan.

Как я могу это сделать с помощью MbC?

plus - если я установил каскад «CollectionMapping» - в какой объект он отражает?

Я использую последнюю версию Nhibernate на nuget.

ответ

2

AFAIK Параметры каскадирования в коллекциях влияют только на значения коллекции. Имея Cascade.All на коллекции:

var e2 = new Entity2(); 
using (var tx = session.BeginTransaction()) 
{ 
    session.Save(e2); 

    session.Save(new Entity1 { Dictionary = { { e2, new Entity3() } } }); // should work 
    session.Save(new Entity1 { Dictionary = { { new Entity2(), new Entity3() } } }); // does not work 

    tx.Commit(); 
} 
+0

, что не ответил на вопрос о том, как отобразить другой каскад для ключа, плюс я больше озабочен Удалить скадирование ключа/значения в карте (я могу проверить каскадирование по умолчанию, я хочу знать, как его настроить) –

+0

, поскольку каскадирование не влияет на ключ карты, в основном это 'Cascade.None' для ключа. Невозможно установить каскадирование для ключа коллекции – Firo

+0

, который отвечает на него, спасибо :) –

Смежные вопросы