Пример WCF RIA Services, HR-заявка 4004 Исключение - PullRequest
0 голосов
/ 29 октября 2011

Я абсолютно новичок в разработке silverlight с помощью RIA

. Я нашел образец WCF RIA Services от silverlight.net, следуя инструкции

. Я получаю сообщение об ошибке при попытке добавить новыйсотрудник

появится одно окно с сообщением VS JIT Debugger

Код: 4004

Категория: управляемая ошибка времени выполнения

Сообщение: System.ServiceModel.DomainServices.Client.DomainException: произошла ошибка при отправке изменений в контексте домена типа

Я использую silverlight 4 с AdventureWork2008Entities, чтобы выполнить это руководство, и ниже приведен код в приложениях

    <dataForm:DataForm x:Name="addEmployeeDataForm"   AutoGenerateFields="False" AutoCommit="True" AutoEdit="True" CommandButtonsVisibility="None">
        <dataForm:DataForm.EditTemplate>
            <DataTemplate>
                <StackPanel>
                    <dataForm:DataField Label="Business Entity ID">
                        <TextBox Text="{Binding BusinessEntityID, Mode=TwoWay}" />
                    </dataForm:DataField>
                    <dataForm:DataField Label="Login ID">
                        <TextBox Text="{Binding LoginID, Mode=TwoWay}" />
                    </dataForm:DataField>
                    <dataForm:DataField Label="National ID">
                        <TextBox Text="{Binding NationalIDNumber, Mode=TwoWay}" />
                    </dataForm:DataField>
                    <dataForm:DataField Label="Title">
                        <TextBox Text="{Binding JobTitle, Mode=TwoWay}" />
                    </dataForm:DataField>
                    <dataForm:DataField Label="Marital Status">
                        <TextBox Text="{Binding MaritalStatus, Mode=TwoWay}" />
                    </dataForm:DataField>
                    <dataForm:DataField Label="Gender">
                        <TextBox Text="{Binding Gender, Mode=TwoWay,NotifyOnValidationError=True,  ValidatesOnExceptions=True }" />
                    </dataForm:DataField>
                    <dataForm:DataField Label="Salaried">
                        <CheckBox IsChecked="{Binding SalariedFlag, Mode=TwoWay,NotifyOnValidationError=True,  ValidatesOnExceptions=True }" />
                    </dataForm:DataField>
                    <dataForm:DataField Label="Active">
                        <CheckBox IsChecked="{Binding CurrentFlag, Mode=TwoWay,NotifyOnValidationError=True,  ValidatesOnExceptions=True }" />
                    </dataForm:DataField>
                </StackPanel>
            </DataTemplate>
        </dataForm:DataForm.EditTemplate>
    </dataForm:DataForm>

Регистрация сотрудника Window.xaml

private void addNewEmployee_Click (отправитель объекта, RoutedEventArgs e) {EmployeeRegistrationWindow addEmp = new EmployeeRegistrationWindow ();addEmp.Closed + = новый EventHandler (addEmp_Closed);addEmp.Show ();}

    private void addEmp_Closed(object sender, EventArgs e)
    {
        EmployeeRegistrationWindow emp = (EmployeeRegistrationWindow) sender;
        if (emp.NewEmployee != null)
        {
            OrganizationContext _organizationContext = (OrganizationContext) (employeeDataSource2.DomainContext);
            _organizationContext.Employees.Add(emp.NewEmployee);
            employeeDataSource2.SubmitChanges();
        }
    }

Employee List.xaml.cs

    public void InsertEmployee(Employee employee)
    {

        employee.HireDate = DateTime.Now;
        employee.ModifiedDate = DateTime.Now;
        employee.VacationHours = 100;
        employee.SickLeaveHours = 0;
        employee.rowguid = Guid.NewGuid();
        employee.BirthDate = new DateTime(1967, 3, 18);
        if ((employee.EntityState != EntityState.Detached))
        {
            this.ObjectContext.ObjectStateManager.ChangeObjectState(employee, EntityState.Added);
        }
        else
        {
            this.ObjectContext.Employees.AddObject(employee);
        }
    }

OrganizationService

1 Ответ

2 голосов
/ 15 октября 2012

Я заметил, что никто не ответил на этот пост, но подумал, что я бы добавил немного информации, с которой я столкнулся при исследовании точно такой же проблемы, на случай, если она кому-нибудь поможет, если не оригинальному постеру.1002 *

Я полагаю, вы используете базу данных AdventureWorks2008R2?Если нет, пожалуйста, проигнорируйте оставшуюся часть этого поста!

Некоторые имена столбцов, очевидно, изменились с момента создания этого прохождения Silverlight.Например, в таблице EmployeeID EmployeeID теперь называется BusinessEntityID, а заголовком - JobTitle.Если вы исправите эти ссылки, то получите другую ошибку, вызванную ...

Между таблицей HumanResources.Employee и таблицей Person.Person существует связь по внешнему ключу.- если у добавляемого сотрудника нет соответствующей записи в таблице Person, вставка завершится неудачно.Поэтому код для вставки сотрудника должен сначала вставить запись в таблицу Person.BusinessEntity и извлечь полученное значение BusinessEntityID.Затем это значение BusinessEntityID следует использовать для вставки соответствующих данных в таблицы Person.Person и HumanResources.Employee.

По крайней мере, мне это кажется так.Надеюсь, это кому-нибудь поможет.

_Ade

...