Nhibernate 基于唯一值而非ID链接两个实体

Nhibernate 基于唯一值而非ID链接两个实体,nhibernate,domain-driven-design,Nhibernate,Domain Driven Design,我有以下数据库表。主键是ID和AnimalType。Type是唯一的字符串 Animal - ID - Name - TypeID AnimalType - ID - Type [Herbivore, Carnivore] 我的课程如下 public class Animal { public int ID { get; private set; } public string Name { get; set; } public AnimalType Type

我有以下数据库表。主键是ID和AnimalType。Type是唯一的字符串

Animal
- ID
- Name
- TypeID

AnimalType
- ID 
- Type [Herbivore, Carnivore]
我的课程如下

public class Animal
{
    public int ID { get; private set; }

    public string Name { get; set; }

    public AnimalType Type { get; set; }
}

public class AnimalType
{
    private int ID { get; set; }

    public string Type { get; set; }
}
我如何让下面的代码在NHibernate中工作,以便它引用相同的草食动物

var horse = new Animal() { Name = "Horse", Type = new AnimalType() { "Herbivore" }};

repository.SaveOrUpdate(horse);

var rabbit = new Animal() { Name = "Rabbit", Type = new AnimalType() { "Herbivore" } };

repository.SaveOrUpdate(rabbit);
更新


如果我能让NHibernate执行这个逻辑,那就好了:

我会研究一些选项

1) 如果数据不经常更改,是否可以将AnimalType设置为枚举而不是实体对象

2) 使用
animalTypeRepository.FindByType(“Herbivore”)
实例化Herbivore AnimalType的对象,并将该对象传递给新动物

3) 将上述逻辑移到
animalRepository.SaveOrUpdate(animal)
方法中,这样您就可以

public class AnimalRepository
{
  public void SaveOrUpdate(Animal animal)
  {
    var animalType = animal.Type;
    if (animalType.ID == 0)
    {
      animal.Type = animalTypeRepository.Find(animalType.Type);
    }

    // save or update animal...
  }
}

这是我假设的方法,我的问题是关于NHibernate中对该场景的支持。您可以在动物映射中调查多对一标记上属性ref属性的使用情况。这允许您通过非FK列引用另一个表。虽然如果数据不会改变,那么最好使用枚举。