0

我绝对是使用 RIA 开发 Silverlight 的初学者

我按照教程从 silverlight.net 找到了 WCF RIA 服务示例

我在尝试添加新员工时遇到错误

它将弹出一个带有消息 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>

员工注册窗口.xaml

private void addNewEmployee_Click(object sender, RoutedEventArgs e) { EmployeeRegistrationWindow addEmp = new EmployeeRegistrationWindow(); addEmp.Closed += new 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();
        }
    }

员工列表.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);
        }
    }

组织服务

4

1 回答 1

2

我注意到没有人回复这篇文章,但我想我会添加一些我在研究完全相同的问题时遇到的信息,以防它帮助某人,如果不是原始海报的话。

  1. 我假设您使用的是 AdventureWorks2008R2 数据库?如果没有请忽略这篇文章的其余部分!

  2. 自生成此 Silverlight 演练以来,某些列名称已明显更改。例如,在 Employee 表中,EmployeeID 现在是 BusinessEntityID,Title 现在是 JobTitle。如果您修复这些引用,您将得到一个不同的错误,这是由...引起的

  3. HumanResources.Employee 表和 Person.Person 表之间存在外键关系 - 如果您添加的 Employee 在 Person 表中没有相应的记录,则插入将失败。因此,插入员工的代码应首先在 Person.BusinessEntity 表中插入一条记录并检索生成的 BusinessEntityID 值。然后应使用此 BusinessEntityID 值将相关数据插入到 Person.Person 和 HumanResources.Employee 表中。

至少,在我看来是这样的。希望这可以帮助某人。

_阿德

于 2012-10-15T15:06:23.177 回答