2011-08-06 35 views
29

Vì vậy, hãy nói rằng tôi có 3 đối tượng Fruit, Apple và Orange. Trái cây là lớp cơ sở trừu tượng cho Apple và Orange. Khi tôi sử dụng session.Store (myApple), nó đặt nó vào bộ sưu tập Apples. Các cửa hàng myOrange trong bộ sưu tập của Oranges. Có ý nghĩa.Chỉ định tên bộ sưu tập trong RavenDB

Tôi có thể nói với Raven rằng tôi muốn có bộ sưu tập Trái cây có thể chứa Táo hoặc Cam không? Mongodb cho phép điều này vì nó cho phép tôi chỉ định rõ tên bộ sưu tập. Tài liệu về bộ sưu tập của RavenDB cho biết:

Mẫu sử dụng dự kiến ​​là các bộ sưu tập được sử dụng để nhóm tài liệu có cấu trúc tương tự, mặc dù không bắt buộc. Từ quan điểm cơ sở dữ liệu, bộ sưu tập chỉ là một nhóm tài liệu chia sẻ cùng một tên đối tượng.

tôi mong đợi nó để được cái gì đó như: session.Store < Fruit> (myApple), hoặc session.Store ("Trái cây", myApple)

Bất kỳ ý tưởng? Cảm ơn.

+0

Những điều này có vẻ tương tự như vấn đề của bạn. Tôi sẽ thử điều này nhưng tôi không thể vào lúc này. http://groups.google.com/group/ravendb/browse_thread/thread/eb86c2ffd29ed5e/11644a7eaddaf123?lnk=gst&q=Inheritance#11644a7eaddaf123 http://mikehadlow.blogspot.com/2010/10/ravendb-playing-with- inheritance-and.html –

Trả lời

39

Awl, Bạn có thể làm điều đó bằng:

session.Store(apple); 
session.Advanced.GetMetadataFor(apple)[Constants.RavenEntityName] = "Fruits"; 

Đó là chặng đường dài để làm như vậy. Cách tốt hơn là thêm logic này trên toàn cầu, trông giống như sau:

store.Conventions.FindTypeTagName = 
    type => type.IsSubclassOf(typeof(Fruit)) ? 
     DocumentConvention.DefaultTypeTagName(typeof(Fruit)) : 
     DocumentConvention.DefaultTypeTagName(type); 

Điều đó sẽ xử lý việc này cho mọi thứ.

+0

Có điều đó làm việc cho tôi, cảm ơn! – awl

+0

Cảm ơn bạn đã trả lời. –

+0

Đối với .NET Core bạn cần sử dụng 'type.GetTypeInfo(). IsSubclassOf (typeof (Fruit))' (từ 'System.Reflection') hoặc' typeof (Fruit) .IsAssignableFrom (type) '([link] (http : //msdn.microsoft.com/en-us/library/system.type.isassignablefrom.aspx)). Hãy ghi nhớ một số gotchas cho 'IsAssignableFrom' ([link] (https://stackoverflow.com/a/2742288/968003)) –

Các vấn đề liên quan