Ở Orchard, nhà phát triển mô-đun có thể học cách "tham gia" hoạt động, đặc biệt khi tham gia các phần và bản ghi chính? Một trong những trợ giúp tốt hơn tôi đã thấy là ở Orchard documentation, nhưng không có ví dụ nào trong số những ví dụ này cho thấy cách tạo mối quan hệ với các bộ phận hiện có hoặc lõi. Như một ví dụ về một cái gì đó tôi đang tìm kiếm, đây là một đoạn mã dịch vụ mô-đun lấy từ một ví dụ làm việc:Tìm hiểu các mối quan hệ và mối quan hệ dữ liệu của Orchard
_contentManager
.Query<TaxonomyPart>()
.Join<RoutePartRecord>()
.Where(r => r.Title == name)
.List()
Trong trường hợp này, một phong tục TaxonomyPart
được tham gia với một lõi RoutePartRecord
. Tôi đã điều tra mã, và tôi không thể thấy làm thế nào mà một TaxononmyPart là "joinable" để một RoutePartRecord. Tương tự như vậy, từ mã làm việc, đây là một mã tài xế đoạn có liên quan một TagsPart tùy chỉnh với một CommonPartRecord lõi:
List<string> tags = new List<string> { "hello", "there" };
IContentQuery<TagsPart, TagsPartRecord> query = _cms.Query<TagsPart, TagsPartRecord>();
query.Where(tpr => tpr.Tags.Any(t => tags.Contains(t.TagRecord.TagName)));
IEnumerable<TagsPart> parts =
query.Join<CommonPartRecord>()
.Where(cpr => cpr.Id != currentItemId)
.OrderByDescending(cpr => cpr.PublishedUtc)
.Slice(part.MaxItems);
Tôi nghĩ tôi có thể học hỏi từ một trong các ví dụ trước như thế nào để tạo truy vấn của riêng tôi. Tôi đã làm điều này:
List<string> tags = new List<string> { "hello", "there" };
IContentQuery<TagsPart, TagsPartRecord> query = _cms.Query<TagsPart, TagsPartRecord>();
query.Where(tpr => tpr.Tags.Any(t => tags.Contains(t.TagRecord.TagName)));
var stuff =
query.Join<ContainerPartRecord>()
.Where(ctrPartRecord => ctrPartRecord.ContentItemRecord.ContentType.Name == "Primary")
.List();
Mục đích của mã của tôi là giới hạn các mục nội dung được tìm thấy chỉ cho một mục cụ thể (hoặc blog). Khi mã chạy, nó đã ném một ngoại lệ trên truy vấn tham gia của tôi nói rằng {"could not resolve property: ContentType of: Orchard.Core.Containers.Models.ContainerPartRecord"}
. Điều này dẫn đến nhiều câu hỏi khác nhau:
- Tại sao phương pháp Display() của ví dụ thứ hai là
CommonPartRecord
dân cư, nhưng không phải làContainerPartRecord
? Nói chung làm thế nào tôi biết được phần nào được ghi lại, và khi nào? - Trong đoạn mã hoạt động, tham gia hoạt động chính xác như thế nào vì không có khóa/điều kiện nối nào được chỉ định (và không có khóa tham chiếu ngầm định rõ ràng)? Ví dụ, tôi đã kiểm tra tệp di chuyển dữ liệu và các lớp
models
và không tìm thấy mối quan hệ vốn có giữa một TagsPart và một CommonPartRecord. Vì vậy, ngoài việc xem xét mã mẫu đó, làm thế nào mà bất cứ ai đã biết ở nơi đầu tiên mà việc tham gia như vậy là hợp pháp hoặc có thể? - Tham gia tôi đã thử với
TagsPart
vàContainerPartRecord
hợp pháp trong bất kỳ ngữ cảnh nào? Cái nào - Cú pháp truy vấn của các ví dụ này chủ yếu là sự phản ánh của Orchard, NHibernate hoặc LINQ to NHibernate? Nếu nó chủ yếu là một sự phản ánh của NHibernate, sau đó cuốn sách NHibernate hoặc bài viết được khuyến khích đọc để tôi có thể đào sâu hơn vào Orchard?
Có vẻ như có một lỗ trong tài liệu liên quan đến các loại suy nghĩ và câu hỏi này, khiến việc viết mô-đun trở nên khó khăn. Bất kỳ câu trả lời có thể được tìm thấy cho chủ đề này, tôi muốn được vui để biên dịch vào một bài báo hoặc tài liệu hướng dẫn cộng đồng Orchard.
Câu trả lời của bạn là một trợ giúp HUGE. Tôi nghĩ rằng bước tiếp theo, để chuẩn bị cho tài liệu mới, là để xây dựng trên câu trả lời # 2. Hiện tại, tôi nghĩ một cuộc đối thoại sẽ tốt hơn diễn đàn Hỏi & đáp. Chúng ta có thể có một cuộc thảo luận e-mail không? [email protected] –