我有一个名为 Person 的实体和另一个名为 Car 的实体,其中每辆车只能由一个人拥有。该人是通过 Ef 从 DB 中检索到的。然后我将这个人设置为 rhe datacontext 到一个 WPF 网格,其中属性绑定到一些控件。太好了太好了。在网格内部,我有一个 itemscontrols,它通过直接绑定显示 CarCollestion 作为 Person 对象的 itemssource。演示文稿完美。选择汽车并对其进行编辑,汽车对象接受更改。关于救人我也想救车收藏。我将这个人附加到一个新的上下文中,将这个人的对象状态更改为已修改并点击 savechanges。人的变化存储在数据库中,而不是汽车的变化。通过附加修改后的汽车并设置对象状态,更改也会保存到数据库中。
我的问题是,是否可以仅将 person 对象附加到 context ,并且 context 会自行附加所有汽车实体。自行保存所有子对象和子对象。
一种解决方案是将对象修改/添加/删除,存储在列表中,并在将人员附加到新上下文后附加每个对象。
抱歉没有提供任何代码,我不在办公室。
此外,这是整个问题的简化版本,但准确
编辑 - 添加了一些代码- 终于在办公室
<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>
和事件处理程序....
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 实体自动附加到上下文中。
也许我错过了一个照顾实体的属性。