2010-10-19 15 views
5

Tôi đã tạo một mô hình thực thể bằng Entity Framework 4, mà tôi đã tiếp xúc qua Dịch vụ Dữ liệu WCF. Một trong các thực thể của tôi cần phải có các thuộc tính được định nghĩa không được lưu giữ trong cơ sở dữ liệu, nhưng trình thiết kế mô hình thực thể không cho phép bạn thực hiện điều này.Làm cách nào để hiển thị các thuộc tính không được lưu giữ lâu dài bằng cách sử dụng Dịch vụ Dữ liệu WCF?

Để làm tròn, tôi đã định nghĩa tất cả các đối tượng của mình là đối tượng POCO, cho phép bạn thêm các thuộc tính không tồn tại vào đối tượng của bạn, chứ không phải mô hình của bạn.

Vấn đề tôi có là, bởi vì các thuộc tính không tồn tại này chỉ tồn tại trong chính các đối tượng chứ không phải mô hình, chúng không được hiển thị thông qua Dịch vụ dữ liệu WCF.

Có cách nào để xác định thuộc tính trong mô hình thực thể không được lưu vào cơ sở dữ liệu không?

Cảm ơn trước cho bất kỳ trả lời

Ryan

Trả lời

0

Vâng các lớp học cho các mô hình là một phần. Bạn có thể viết thuộc tính không tồn tại của bạn trong các phần khác của các lớp. Hãy viết xuống nếu điều này làm việc vì tôi không sử dụng WCF Data Services, nhưng mỗi khi tôi cần một tài sản trong các đối tượng kinh doanh mà không được ánh xạ tới trường trong DB tôi làm theo cách đó.

+0

Thật không may, đây là những gì tôi đã cố gắng làm. Các thuộc tính không xuất hiện trong Reference.cs, khi bạn tạo một tham chiếu dịch vụ tới dịch vụ dữ liệu WCF. –

0

Tôi nghĩ ikirachen đang đi đúng hướng với việc sử dụng một phần lớp để xác định các thuộc tính bổ sung. Đối với WCF để lộ chúng, bạn cũng phải đánh dấu các thuộc tính với thuộc tính DataMember. Tôi tạo ra một dịch vụ WCF nhỏ để kiểm tra điều này:

[ServiceContract] 
public interface IService1 
{ 
    [OperationContract] 
    string DoStuff(User user); 
} 

public class Service1 : IService1 
{ 
    public string DoStuff(User user) 
    { 
     string result = string.Empty; 
     foreach (Guid leadId in user.AssociatedLeadIds) 
     { 
      // This is going to console on client, 
      // just making sure we can read the data sent to us 
      result += leadId.ToString() + "\n"; 
     } 

     return result; 
    } 
} 

// partial entity model class 
public partial class User 
{ 
    // This is not persisted to our DB with the user model 
    [DataMember] 
    public ICollection<Guid> AssociatedLeadIds { get; set; } 
} 

Và đây là mã khách hàng, thể hiện sự AssociatedLeadIds tiếp xúc qua WCF:

class Program 
{ 
    static void Main(string[] args) 
    { 
     User u = new User 
     { 
      // Here we set our non-persisted property data 
      AssociatedLeadIds = new Guid[] 
      { 
       Guid.NewGuid(), 
       Guid.NewGuid(), 
       Guid.NewGuid() 
      }, 
      // The rest are persisted properties 
      ApplicationId = Guid.NewGuid(), 
      UserName = "TestUser", 
      LoweredUserName = "testuser", 
      LastActivityDate = DateTime.Now, 
      IsAnonymous = false 
     }; 

     using (Service1Client svc = new Service1Client()) 
     { 
      // Here we call the service operation 
      // and print the response to the console 
      Console.WriteLine(svc.DoStuff(u)); 
     } 

     Console.ReadKey(); 
    } 
} 

Hy vọng rằng điều này giúp!

+0

Đã giải mã hết mã này một chút. Hãy cho tôi biết nếu bạn vẫn không thể để lộ các tài sản thông qua WCF. – jlaneaz

+0

Cảm ơn jlaneaz đầu vào của bạn, tiếc là điều này vẫn không làm việc cho tôi bằng cách sử dụng một dịch vụ dữ liệu WCF. Tôi nghĩ rằng tôi biết vấn đề là gì. Tham chiếu dịch vụ cho một Dịch vụ Dữ liệu Wcf dường như được xây dựng từ tệp EDMX chứ không phải là cơ sở mã, do đó chỉ những thuộc tính tồn tại trong tệp EDMX được đăng trong tham chiếu dịch vụ. –

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