0
假設你有以下對象:RavenDb多態性:無法加載子對象?
public abstract class Animal {
public Guid Id { get; set; }
}
public class Cat : Animal {
/* Stuff */
}
public class Dog : Animal {
/* Stuff */
}
我們儲存一些貓&犬進入RavenDb具有以下的ID:
貓/ 1367779b-20c7-466a-a660-46ae7e35c5bd
狗/ 23ef9796-9cdd-4323-88d2-5e5c37881352
如果我們試圖從商店這樣加載對象,我們有以下行爲:
var id = Guid.Parse("1367779b-20c7-466a-a660-46ae7e35c5bd");
Session.Load<Cat>(id) => returns correct Cat
Session.Load<Animal>("Cats/"+id) => returns correct Cat as an animal
Session.Load<Animal>(id) => returns null ???
我們確實想使用最後一行,但顯然這不起作用,因爲RavenDb中的前綴邏輯。我們已經找到一種方法來避免這種情況:使用而不是字符串一個GUID爲ID通過對象的構造器,如:
protected Animal(){
this.Id = Guid.NewGuid().ToString();
}
這消除了前綴「貓/」和「狗/」完全。有沒有更好的解決方案來解決這個問題,以便我們可以將Id保留爲Guid而不是字符串值?