Могу ли я сделать это с помощью OData Services и Silverlight на стороне клиента, использующих другой объект, чем на стороне сервера? - PullRequest
1 голос
/ 26 июля 2011

Я работаю над приложением WP7 (на основе ODataWPNorthwindSample из MSDN) с использованием библиотеки ODATA v2 с классом DataServiceState. В этом примере у меня есть класс MainViewModel.cs, где

> DataServiceCollection<Customer> customers;
> 
>   public DataServiceCollection<Customer> Customers 
>         {
>             get { return this.customers; }
> 
>             private set
>             {
>                 this.customers = value;
>                 
>                 this.customers.LoadCompleted +=
> this.OnCustomersLoaded;
>                 this.customers.CollectionChanged += (o, e) => {
> this.NotifyPropertyChanged("CustomersTitle"); };
> 
>                 this.NotifyPropertyChanged("Customers");
>                 this.NotifyPropertyChanged("CustomersTitle");
>             }
>         }

Где класс Customer имеет некоторые атрибуты(очень короткая версия):

> public partial class Customer :
> global::System.ComponentModel.INotifyPropertyChanged
>     {
>         
>        
> [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Services.Design",
> "1.0.0")]
>         public static Customer CreateCustomer(string customerID,
> string companyName)
>         {
>             Customer customer = new Customer();
>             customer.CustomerID = customerID;
>             customer.CompanyName = companyName;
>             return customer;
>         }
> 
> [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Services.Design",
> "1.0.0")]
>         public string Address
>         {
>             get
>             {
>                 return this._Address;
>             }
>             set
>             {
>                 this.OnAddressChanging(value);
>                 this._Address = value;
>                 this.OnAddressChanged();
>                 this.OnPropertyChanged("Address");
>             }
>         }
>        
> [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Services.Design",
> "1.0.0")]
>         private string _Address;
>         partial void OnAddressChanging(string value);
>

     partial void OnAddressChanged();

По какой-то причине мне нужно добавить еще один атрибут «AddressLocal», который будет использоваться только на стороне клиента, и связать его с XAML.Значение «AddressLocal» я вычисляю на основе атрибута «Address».Таким образом, если «Address» будет изменен, «AddressLocal» также изменится.

>  public string AddressLocal
>     {
>         get
>         {
>             return this._ AddressLocal;
>         }
>         set
>         {
>             this.On AddressLocal Changing(value);
>             this._AddressLocal = value;
>             this.OnAddressLocal Changed();
>             this.OnPropertyChanged("AddressLocal ");
>         }
>     }
>     
>     private string _AddressLocal;
>     partial void OnAddressLocal Changing(string value);
>     partial void OnAddressLocal Changed();

Но этот атрибут не существует в базе данных на сервере, и он мне там не нужен, но когда я вызываю

> App.ViewModel.Context.BeginSaveChanges(OnSaveCompleted, null);
> 
> void OnSaveCompleted(IAsyncResult asyncResult)
>         {
>             Deployment.Current.Dispatcher.BeginInvoke(() =>
>             {
>                 try
>                 {
>                     App.ViewModel.Context.EndSaveChanges(asyncResult);
>                     this.StatusMessage.Text = "Successfully saved
> changes";
>                 }

Это дает мне исключения, потому что это DataServiceCollection клиентов;отличается от объектов клиентов в контексте.Я знаю, что это, вероятно, произошло из-за ошибки в архитектуре приложения.Моей первой мыслью было: создать Oblect «CustomerLocal» и наследовать от Customer, но это не работает.Есть ли у вас какие-либо идеи?

1 Ответ

1 голос
/ 26 июля 2011

Если вы сделаете ваше дополнительное свойство внутренним, SaveChanges будет игнорировать его.

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