Здесь вам нужен составной идентификатор для использования с вашим PlayerBowlerType.Эта настройка должна работать:
public class PlayerBowlerTypeId
{
public virtual int PlayerId { get; set; }
public virtual int BowlerTypeId { get; set; }
public override bool Equals(object obj)
{
return Equals(obj as PlayerBowlerTypeId);
}
private bool Equals(PlayerBowlerTypeId other)
{
if (ReferenceEquals(other, null)) return false;
if (ReferenceEquals(this, other)) return true;
return PlayerId == other.PlayerId &&
BowlerTypeId == other.BowlerTypeId;
}
public override int GetHashCode()
{
unchecked
{
int hash = GetType().GetHashCode();
hash = (hash * 31) ^ PlayerId.GetHashCode();
hash = (hash * 31) ^ BowlerTypeId.GetHashCode();
return hash;
}
}
}
public class PlayerBowlerType
{
public PlayerBowlerType()
{
Id = new PlayerBowlerTypeId();
}
public virtual PlayerBowlerTypeId Id { get; set; }
}
public class PlayerBowlerTypeMap : ClassMap<PlayerBowlerType>
{
public PlayerBowlerTypeMap()
{
Table("TABLENAME");
CompositeId<PlayerBowlerTypeId>(x => x.Id)
.KeyProperty(x => x.BowlerTypeId, "COLUMNNAME")
.KeyProperty(x => x.PlayerId, "COLUMNNAME");
}
}
Технически это можно сделать без объекта идентификации (тип PlayerBowlerTypeId будет удален, а код помещен непосредственно в PlayerBowlerType и соответствующим образом адаптирован), но у меня есть номерпроблем (3-4 отдельных ошибок), вызванных этим.Один из них обсуждается здесь .
Хотя я ненавижу менять доменные объекты для компенсации ошибок в системе ORM, если вы просто используете тип PlayerBowlerTypeId, это сэкономит вам многоголовные боли.
Это должно работать до тех пор, пока вы изменяете отображение, чтобы использовать ваши фактические имена таблиц и столбцов (и все, что вам нужно сделать с отображением для вашей конкретной настройки).