Я определил первичный ключ следующим образом:
CompositeId()
.KeyProperty(x => x.Id)
.KeyProperty(x => x.Type);
Я пробовал следующее:
References(x => x.EntityWith2ColsPK);
И не удалось выполнить:
Внешний ключ (Fk_MyEntity_EntityWith2ColsPK: MyEntities [Fk_EntityWith2ColsPK])) должен иметь то же количество столбцов, что и ссылочный первичный ключ (EntityWith2ColsPKs [Id, Type]) *
Как можно ссылаться на сущность из EntityWith из EntityWith1013 *
Обновление:
Я пробовал следующее (в соответствии с комментарием AlfeG):
HasMany<EntityWith2ColsPK>(x => x.EntityWith2ColsPK).KeyColumns.Add("Id", "Type").Cascade.All();
Сбой при:
Пользовательский тип не реализует UserCollectionType: EntityWith2ColsPK
Но в любом случае я не хочу отношения 1 ко многим, я хочу отношения 1 к 1.Тем не менее, я не могу заставить ни одну из них работать.
Кроме того, я попробовал:
HasOne<EntityWith2ColsPK>(x => x.EntityWith2ColsPK).PropertyRef(x => x.Id).PropertyRef(x => x.Type);
Что не получается с:
NHibernate.MappingException: свойство не найдено: Введите сущность EntityWith2ColsPK
Что я могу сделать, чтобы это действительно заработало?
Мне удалось чего-то достичь в БД .. но пока,по какой-то причине я подозреваю, что оно дважды отображает свойство «Тип», потому что я хочу, чтобы оно было как частью первичного ключа, так и частью внешнего ключа. Вот что я сделал:
References(x => x.EntityWith2ColsPK).Columns("EntityWith2ColsPKId", "Type").Formula("Id = :EntityWith2ColsPKId AND Type = :Type");
Но я получил следующее исключение:
System.IndexOutOfRangeException: недопустимый индекс 8 для этой SqlParameterCollection с Count = 8.
Поскольку отображение этой сущности такое же, как EntityWith2ColsPK:
CompositeId()
.KeyProperty(x => x.Id)
.KeyProperty(x => ((ILocalizedEntity) x).Language);
HELP!