Tôi đã đến với rất nhiều kết thúc chết trên câu hỏi này. Giả sử, .NET 3.5 SP1 có hỗ trợ cho các thực thể ADO.NET Entity Framework trong các hợp đồng WCF. Nhưng khi tôi tìm kiếm thông tin chắc chắn về nó, tôi không nhận được nhiều câu trả lời. Tôi tìm thấy đoạn mã này trên một chuỗi MSDN. Có ai có bất cứ kinh nghiệm với điều này? Điều gì đã xảy ra với [DataContract]? Đây có phải là tất cả để có nó? Tại sao có rất ít tài liệu về điều này?Hợp đồng WCF từ Khung thực thể?
Câu trả lời này từ Tim Mallalieu trong Microsoft.
Các loại thực thể được tạo trong Khuôn khổ thực thể, theo mặc định Hợp đồng dữ liệu. Nếu tôi tạo một mô hình đơn giản trong Trình thiết kế thực thể như sau: Loại thực thể giỏ hàng theo mặc định là DataContract với tất cả các thuộc tính được chú thích là thành viên dữ liệu. Sau đó chúng tôi có thể sử dụng điều này trong một dịch vụ WCF như sau:
[ServiceContract]
public interface IService1
{
[OperationContract]
Cart[] AllCarts();
}
public class Service1 : IService1
{
public Cart[] AllCarts()
{
using (MSPetShop4Entities context = new MSPetShop4Entities())
{
var carts = from c in context.Carts select c;
return carts.ToArray();
}
}
}
Như Entities là DataContracts bây giờ bạn có thể cuộn dịch vụ của bạn như bạn thấy phù hợp và gửi những qua dây dẫn.
Cuối cùng tôi đã làm chính xác điều đó. Tôi hy vọng nó không phải là một sai lầm trong thời gian dài. Nhược điểm tôi thấy cho đến nay là tôi đã kết thúc việc thực hiện một mô hình kho lưu trữ ở phía khách hàng chứ không phải ở phía mô hình. Tôi không hài lòng về điều đó và có lẽ sẽ phải tái cấu trúc lại sau này. – Weej
Sự nguy hiểm của dịch vụ dữ liệu ADO.NET là nó có thể được khá khó khăn để làm theo một cách tiếp cận DDD. Bạn nên xử lý các dịch vụ dữ liệu ADO.NET như là: các dịch vụ dữ liệu. Nếu bạn cần một tập hợp các dịch vụ mô hình mạnh hơn, bạn sẽ cần phải tạo riêng các dịch vụ đó. –
Ngay cả với phiên bản mới nhất của ADO .NET Data Services và EFCF 4.1, nó vẫn còn hạn chế nghiêm trọng. Ví dụ, không có toán tử tổng hợp nào từ LINQ được hỗ trợ, bao gồm 'Distinct()'. Nếu bạn cần bất cứ điều gì nhiều hơn các chức năng của CRUD, bạn nên tránh xa các Dịch vụ Dữ liệu. – Yuck