Как открыть непостоянные свойства с помощью службы данных WCF? - PullRequest
5 голосов
/ 19 октября 2010

Я создал модель сущностей, используя Entity Framework 4, которую я представил через Службу данных WCF.Одна из моих сущностей должна иметь определенные свойства, которые не сохраняются в базе данных, но дизайнер Entity Model не позволяет вам сделать это.

Чтобы обойти это, я определил все мои объекты как POCOобъекты, которые позволяют вам добавлять непостоянные свойства к вашим объектам, но не к вашей модели.

Проблема, с которой я столкнулся, заключается в том, что, поскольку эти непостоянные свойства существуют только в самих объектах, а не в модели, онине предоставляется через службу данных WCF.

Есть ли способ определить свойства в модели сущностей, которые не сохранены в базе данных?

Заранее благодарен за любые ответы

Райан

Ответы [ 2 ]

0 голосов
/ 22 октября 2010

Я думаю, что ikirachen находится на правильном пути с использованием частичного класса для определения дополнительных свойств. Чтобы WCF открыл их, вы также должны пометить свойства атрибутом DataMember. Я создал небольшой сервис WCF для проверки этого:

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

А вот код клиента, показывающий AssociatedLeadIds, предоставляемые через 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();
    }
}

Надеюсь, это поможет!

0 голосов
/ 20 октября 2010

Ну классы для модели являются частичными. Вы можете написать свои непостоянные свойства в других частях классов. Пожалуйста, запишите, если это работает, потому что я не использую WCF Data Services, но каждый раз, когда мне нужно свойство в бизнес-объектах, которое не отображается на поле в БД, я делаю это таким образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...