2009-06-26 49 views
2

我有以下數據庫表。主鍵是ID和AnimalType.Type是唯一的字符串。基於唯一值鏈接兩個實體不是ID

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的工作,所以它引用草食動物相同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); 

UPDATE

是很好,如果我能得到的NHibernate執行此邏輯:http://andreas.scherbaum.la/blog/archives/11-Avoid-Unique-Key-violation.html

回答

1

我調查了幾個選項。

1)如果數據沒有頻繁變化,你可以讓AnimalType成爲Enum而不是Entity Object?

2)使用animalTypeRepository.FindByType("Herbivore")實例化草食動物動物類型的對象,並將該對象傳遞給您的新動物。

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... 
    } 
} 
+0

這是我認爲它會做的方式,我的問題是專門圍繞支持此範圍內的NHibernate場景。 – bleevo 2009-06-27 10:36:24