2010-10-19 7 views
5

Ich habe ein Entitätsmodell mit Entity Framework 4 erstellt, das ich über einen WCF-Datenservice verfügbar gemacht habe. Für eine meiner Entitäten müssen Eigenschaften definiert werden, die nicht in der Datenbank beibehalten werden, aber der Designer des Entitätsmodells lässt dies nicht zu.Wie stelle ich nicht persistente Eigenschaften mit einem WCF-Datenservice zur Verfügung?

Um dies zu umgehen habe ich alle meine Objekte als POCO-Objekte definiert, mit denen Sie Ihren Objekten nicht permanente Eigenschaften hinzufügen können, aber nicht Ihr Modell.

Das Problem, das ich habe ist, dass, weil diese nicht persistent Eigenschaften nur in den Objekten selbst und nicht das Modell vorhanden sind, sie nicht über den WCF-Datendienst verfügbar gemacht werden.

Gibt es eine Möglichkeit, Eigenschaften in einem Entitätsmodell zu definieren, die nicht in der Datenbank beibehalten werden?

Vielen Dank im Voraus für alle Antworten

Ryan

Antwort

0

Nun, die Klassen für das Modell sind teilweise. Sie können Ihre nicht persistenten Eigenschaften in die anderen Teile der Klassen schreiben. Bitte notieren Sie, ob dies funktioniert, da ich nicht WCF Data Services verwende, aber jedes Mal, wenn ich eine Eigenschaft in Geschäftsobjekten benötige, die nicht dem Feld in der DB zugeordnet ist, mache ich es so.

+0

Leider habe ich das schon versucht. Die Eigenschaften werden jedoch nicht in Reference.cs angezeigt, wenn Sie einen Dienstverweis für den WCF-Datendienst erstellen. –

0

Ich denke, ikirachen ist auf dem richtigen Weg mit der Verwendung einer partiellen Klasse, um zusätzliche Eigenschaften zu definieren. Damit WCF sie verfügbar macht, müssen Sie die Eigenschaften auch mit dem DataMember-Attribut kennzeichnen. Ich habe einen kleinen WCF-Dienst dies zu testen:

[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; } 
} 

Und hier ist der Client-Code und zeigt die AssociatedLeadIds über WCF ausgesetzt:

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(); 
    } 
} 

Hoffentlich hilft!

+0

Den Code ein bisschen mehr ausgearbeitet. Lassen Sie mich wissen, wenn Sie die Eigenschaften noch nicht über WCF verfügbar machen können. – jlaneaz

+0

Vielen Dank für Ihre Eingabe jlaneaz, leider funktioniert das immer noch nicht für mich mit einem WCF Data Service. Ich denke, ich weiß, was das Problem ist. Der Dienstverweis für einen Wcf-Datenservice scheint eher aus der EDMX-Datei als aus der Codebasis aufgebaut zu sein, sodass nur die Eigenschaften, die in der EDMX-Datei vorhanden sind, in die Dienstreferenz serialisiert werden. –

Verwandte Themen