我有一张植物和信息表。
植物有一个 ID、名称、...、MainInformationID
信息具有 ID、标题、...、PlantID
一个工厂可以有很多信息,但只有一个 MainInformation。信息只能有一种植物。
我有一个 ViewModel 类,其中包含绑定到窗口的可观察的植物集合和信息。
当我尝试更改植物的主要信息时。我收到此错误:
来自“FK_Plants_Information”关联集的关系处于“已添加”状态。给定多重约束,相应的“信息”也必须处于“已添加”状态。
如果我选择了一个没有被任何工厂使用的信息,它会显示“已添加”状态,如果我选择了一个正在使用的信息,则会显示“已删除”状态。
**class PlantsViewModel : ViewModelBase
{
private DAL _dal = new DAL();
private ObservableCollection<Plant> _plants = new ObservableCollection<Plant>();
public ObservableCollection<Plant> Plants
{
get { return _plants; }
set
{
_plants = value;
_OnPropertyChanged("Plants");
}
}
private Plant _selectedPlant;
public Plant SelectedPlant
{
get { return _selectedPlant; }
set
{
_selectedPlant = value;
_OnPropertyChanged("SelectedPlant");
}
}
private ObservableCollection<Information> _information = new ObservableCollection<Information>();
public ObservableCollection<Information> Information
{
get { return _information; }
set
{
_information = value;
_OnPropertyChanged("Information");
}
}
}
还有窗户:
<TextBox Grid.Column="1" Grid.Row="0" Width="150" Text="{Binding Path=SelectedPlant.LatinName}" />
<TextBox Grid.Column="1" Grid.Row="1" Width="150" Text="{Binding Path=SelectedPlant.LocalName}" />
<TextBox Grid.Column="1" Grid.Row="2" Width="150" Text="{Binding Path=SelectedPlant.CycleTime}" />
<ComboBox Grid.Column="1" Grid.Row="3" Width="150" ItemsSource="{Binding Path=Information}"
DisplayMemberPath="Title"
SelectedValue="{Binding Path=SelectedPlant.MainInformation, Mode=TwoWay}" />
DAL 看起来像这样。
public class DAL {
private static Entities _context = new Entities();
public void SaveChanges()
{
_context.SaveChanges();
}
public List<Plant> GetAllPlants()
{
return _context.Plants.ToList();
}
public void AddNewPlant(Plant plant)
{
_context.Plants.AddObject(plant);
}
public void DeletePlant(Plant plant)
{
_context.DeleteObject(plant);
}
}
另外请告诉我这里是否有任何看起来不是一个好主意的东西(比如有一个静态上下文,我将我的 viewModel 连接到 dal 的方式等等......(我是一个初学者,所以我不'真的不知道它应该如何正确使用)