Службы RIA WCF - ошибка при использовании именованного обновления - PullRequest
2 голосов
/ 30 ноября 2011

Я создал очень простое решение Silverlight RIA с EF4 на стороне сервера. Я добавил метод Named Update в DomainService, но не могу его использовать. Проблема с ChangeSet.GetOriginal (). Возвращает ноль:

    [EnableClientAccess()]
    public class StudentsDomainService : LinqToEntitiesDomainService<Model1Container>
    {
        [Update(UsingCustomMethod = true)]
        public void MyMethod(Student stud, int a, int b)
        {
            stud.FirstName = (a*b).ToString();
            var original = this.ChangeSet.GetOriginal(stud);
            // original is null;
            this.ObjectContext.StudentSet.AttachAsModified(stud, original); //Exception is thrown
        }
        .
        .
        .
     }

это код xaml:

public partial class MainPage : UserControl
    {
        StudentsDomainContext ctx;
        Student stud;

        public MainPage()
        {            
            InitializeComponent();
            ctx = new StudentsDomainContext();
        }

        private void buttonGet_Click(object sender, RoutedEventArgs e)
        {
            ctx.Load<Student>(ctx.GetStudentSetQuery()).Completed += new EventHandler(MainPage_Completed);
        }

        void MainPage_Completed(object sender, EventArgs e)
        {                     
            var lo = (sender as LoadOperation<Student>);
            stud = lo.Entities.First();                    
        }

        private void buttonChange_Click(object sender, RoutedEventArgs e)
        {
            stud.MyMethod(3, 6);                             
            ctx.SubmitChanges();           
        }
    }

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

1 Ответ

0 голосов
/ 21 ноября 2014

Простой ответ на ваш вопрос: вы не изменили сущность в своем приложении silverlight, поэтому ничего не отправляете на сервер, поэтому вы не можете получить оригинал еще несколько предложений.Прежде всего, я бы предложил вам использовать стандартную функцию обновления в службе домена Ria, которая выглядит примерно так:Затем на стороне клиента вы можете изменить значение сущности, в вашем случае вы можете изменить имя студента на своей части Silverlight.затем отправьте изменения на сервер все вместе.

public void UpdateAddress(Address currentAddress)
        {
            this.DbContext.Addresses.AttachAsModified(currentAddress, this.ChangeSet.GetOriginal(currentAddress), this.DbContext);
        }

2. Действие обновления в последней версии устарело, оно было заменено на EntityAction.3. Если вы действительно хотите использовать свой собственный метод, вы можете попробовать использовать RoundtripOriginalAttribute, используйте этот атрибут, чтобы аннотировать все свойства, которые вы хотите отправить обратно на сервер.

...