Обновление именованного метода доменной службы не работает

Я использую VS 2010 и Silverlight 4 и WCF RIA v1.

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

Это ошибка:

«Сообщение: необработанная ошибка в приложении Silverlight *Операция отправки не удалась. Значение не может быть нулевым.*Имя параметра: исходное в System.ServiceModel.DomainServices.EntityFramework.ObjectContextExtensions».

Здесь происходит ошибка в доменной службе this.ObjectContext.Prospects.AttachAsModified(p, this.ChangeSet.GetOriginal(p));

Я прочитал документацию по изменениям для WCF и думаю, что все делаю правильно.

Может ли кто-нибудь помочь мне понять, что происходит?

Ваше здоровье

Это объяснение кода:

Клиент

.....

<riaControls:DomainDataSource.DomainContext>
      <my:MarketingDomainContext />
 </riaControls:DomainDataSource.DomainContext>

.....

<Grid x:Name="LayoutRoot" Background="White">
     <Grid DataContext="{Binding ElementName=comboBoxProspects, Path=SelectedItem}" 
            Name="gdProspects" Margin="10">

....... .......

Я беру объект «Перспективы» из Сети.

Я попытался вызвать именованный метод обновления, используя как контекст, объявленный глобально, так и метод обновления int Entity.

public partial class MainPage : UserControl
{

    MarketingDomainContext ctx;

    private void dsProspects_LoadedData(object sender, LoadedDataEventArgs e)
    {
          ctx = (MarketingDomainContext)dsProspects.DomainContext;
    }

    private void btnSubmit2_Click(object sender, RoutedEventArgs e)
    {
      //((Prospect)gdProspects.DataContext).CalculateProspectValue(
     //    int.Parse(tbNumber1.Text), int.Parse(tbNumber2.Text));
      var tempProsp = gdProspects.DataContext as Prospect;
      ctx.CalculateProspectValue(tempProsp, int.Parse(tbNumber1.Text), 
         int.Parse(tbNumber2.Text));
        ctx.SubmitChanges();
   }

Метод службы домена

[Update(UsingCustomMethod=true)]    
public void CalculateProspectValue(Prospect p, int a, int b)     
{
   p.Comments = "Value = " + a * b;
   // Error happens here
   this.ObjectContext.Prospects.AttachAsModified(p, this.ChangeSet.GetOriginal(p));

 }

 public void UpdateProspect(Prospect currentProspect)    
 {
  this.ObjectContext.Prospects.AttachAsModified(currentProspect,   this.ChangeSet.GetOriginal(currentProspect));

 }

person Cleyton    schedule 20.02.2011    source источник


Ответы (1)


Вам нужно добавить атрибут [RoundTripOriginal] к одному из элементов «Потенциальные клиенты» в ваших метаданных, который не является ключевым.

person Vanessa Turney    schedule 01.03.2011