我有以下数据库表。主键是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中使用以下代码,以便它引用 Herbivore 的相同AnimalType?
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执行这个逻辑,那就太好了:http://andreas.scherbaum.la/blog/archives/11-Avoid-Unique-Key-violation.html
答案 0 :(得分:1)
我会调查几个选项。
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...
}
}