2015-09-09 15 views
5

Tôi có cấu trúc đối tượng biểu mẫu tùy chỉnh mà tôi sử dụng thành công với mongodb.Tôi có thể sử dụng đa hình/kế thừa trong trình điều khiển C# DocumentDb

Tôi đã điều tra khả năng thay thế Mongo bằng DocumentDb.

Cấu trúc lớp của tôi bao gồm điều khiển cơ sở mà các loại điều khiển khác nhau kế thừa từ đó. ví dụ. Điều khiển hộp văn bản, Kiểm soát thả xuống

Trong mongo tôi sử dụng trường phân biệt đối xử để lưu trữ loại thực tế, trong trình điều khiển C# DocumentDb mà tôi không thể thấy cùng một tính năng.

dưới đây là mẫu về cách Mongo lưu trữ cấu trúc lớp học của tôi.

{ 
    "_t" : "TextboxControl", 
    "LabelText" : "Location of incident", 
    "IsRequired" : true, 
    "_id" : "cbe059d9-b6a9-4de2-b63b-14d44b022e37" 
} 

Trong documentdb cấu trúc trông giống như

{ 
    "LabelText": "Location of incident", 
    "IsRequired": true, 
    "id": "cbe059d9-b6a9-4de2-b63b-14d44b022e37" 
} 

Như bạn có thể thấy phiên bản Mongo có một "_T" tài sản nêu rõ loại thực tế, điều này sau đó được sử dụng khi tôi đọc dữ liệu để tạo ra các đúng loại. Trong phiên bản documentdb nó chỉ đơn giản là một fieldtype

+0

hỗ trợ đúng cho JsonSerializerSettings cuối cùng cũng được làm việc trên bởi MS: https://github.com/Azure/azure-documentdb-dotnet/issues/229 – AndyJ

Trả lời

3

Sau nhiều tuần tìm kiếm cuối cùng tôi đã xem qua các câu trả lời

https://github.com/markrexwinkel/azure-docdb-linq-extension

Về cơ bản thư viện này kéo dài của DocumentDb C# SDK và cho phép thiết lập tùy chỉnh JSON được áp dụng. Dưới mui xe người dùng trình điều khiển documentdb json.net.

Tôi hiện có thuộc tính "$ type" là tính năng được tích hợp vào thư viện json.net xuất sắc của newtonsoft.

json của tôi bây giờ trông giống như

{ 
    "$type" : "MyNameSpace.DropDownSingleFormBuilderControlTemplate, MyLibrary", 
    "LabelText" : "Label Text" 
    "IsRequired" : true, 
    "_id" : "cbe059d9-b6a9-4de2-b63b-14d44b022e37" 
} 
0

Tôi tự hỏi nếu bạn thực sự cần phải làm điều này ở tất cả trong DocumentDb.

Bạn có thể gán kiểu như vậy:

private TextBoxControl GetControl(string link) 
{ 
    return client.CreateDocumentQuery<TextBoxControl>(link, "SELECT TOP 1 * FROM Controls"); 
} 

cú pháp của tôi có thể ra nhưng phần CreateDocumentQuery<T> nên làm những gì bạn cần mà không cần phải lưu trữ các loại.

+0

sẽ có thể làm việc cho một số tình huống. Nhưng thiết lập cụ thể của tôi tôi không biết loại, do đó loại được lưu trữ trong json. –

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