我有一个名为Person的实体和另一个名为Car的实体,其中evey car只能由一个人拥有。 通过Ef从DB中检索该人。 然后我将人员设置为rhe datacontext到WPF网格,其中属性绑定到某些控件。很好,所以好。 在网格内部,我有一个itemscontrols,通过直接绑定显示CarCollestion作为Person对象的itemssource。 Presentatio完美无缺。 Iselecta汽车并编辑它,汽车对象接受更改。在保存这个人的同时,我也想保存汽车收藏品。 我将此人附加到新上下文,将人员的对象状态更改为已修改并按下savechanges。 人的变化存储在Db中,但不存储在汽车的变化中。 通过附加修改后的汽车并设置对象状态,更改也会保存到数据库中。
我的问题是,如果可能只有person对象附加到上下文,并且上下文将自己附加所有汽车实体。保存所有子项和子项。
一种解决方案是在存储的列表中修改/添加/删除对象,并在将人员附加到新上下文后附加每一个对象。
很抱歉没有提供任何代码,我不在办公室。
此外,这是整个问题的简化版本,但准确
编辑 - 添加了一些代码 - 最后在办公室
<Grid Name="testGrid" DataContext="{Binding}" Initialized="testGrid_Initialized">
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<Label Name="ID" Grid.Row="0" Content="{Binding Path=ID}"/>
<TextBox Name="Name" Grid.Row="1" Text="{Binding Path=Name}"/>
<ItemsControl Grid.Row="2" ItemsSource="{Binding Path=Cars}" >
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Vertical" VerticalAlignment="Stretch">
</StackPanel>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Button Name="btnCar" Content="{Binding Path=Name}" Click="btnCar_Click" Tag="{Binding .}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
<Button Content="Save" Click="Button_Click"/>
</Grid>
和eventhandlers ....
private void btnCar_Click(object sender, RoutedEventArgs e)
{
Button b = sender as Button;
Car c = b.Tag as Car;
Car.Name += "-";
}
#endregion
private void testGrid_Initialized(object sender, EventArgs e)
{
using(var c = new DbContext())
{
globalPerson = c.Person.First();
Grid g = sender as Grid;
g.DataContext = globalPerson;
globalPerson.Name += "_";
}
}
private void Button_Click(object sender, RoutedEventArgs e)
{
using(var c = new DbContext())
{
c.Attach(globalPerson);
c.ObjectStateManager.ChangeObjectState(globalPerson, EntityState.Modified);
c.SaveChanges();
}
}
这样做的结果是,在调用saveChenges之后,Person更改将保存在DB中,而不是保存在汽车名称中。 如果我还将修改后的Car实体附加到上下文中,那么它们也会被保存。一切正常。
问题是,我必须维护一个已经修改,添加,....的实体列表,并手动附加每个人的单个。它变得混乱。
我想知道,当附加此人时,是否可以将Car实体自动附加到上下文。
也许我错过了一个负责实体的财产。