У меня есть таблица растений и информации.
Растения имеют идентификатор, имя, ..., MainInformationID
Информация имеет идентификатор, название, ..., PlantID
На одном растении может быть много информации, но только одна основная информация. Информация может иметь только одно растение.
У меня есть класс 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 и т. Д. (Я новичок) так что я не знаю, как его правильно использовать)