Я разрабатываю первое приложение базы данных в VB.NET, используя сущность framework версии 6.1.1 и sql server 2008. У меня есть некоторые чистые таблицы соединений, которые связывают многие и многие отношения между двумя таблицами. Мои сущности не отслеживаются.Entity Framework 6 Навигационные коллекции свойств
Вот основные примеры классов (порожденных от EF Tt файлов), которые я использую:
Public Class Part
Public Property id As Long
Public Property name As String
Public Overridable Property CarModels As ICollection(Of CarModel) = New HashSet(Of CarModel)
End Class
Public Class CarModel
Public Property id As Long
Public Property name As String
Public Overridable Property Parts As ICollection(Of Part) = New HashSet(Of Part)
End Class
Когда я обновить поля для объекта, я установить значение, а затем включить код, как это:
obj.Name = "New Name"
context.Entry(obj).State = EntityState.Modified
context.SaveChanges
Это сохранит значение Name в базе данных, как я ожидаю. Моя проблема заключается в том, чтобы добавить новую CarModel в существующую часть или удалить существующую CarModel из части. Я пробовал несколько вещей, но не нашел решения. Вот пример моего кода:
Dim p As Part = context.Parts.where(Function(it) it.id.equals(1)).first 'Part I am working with
Dim c As CarModel = context.CarModels.where(Function(it) it.id.equals(1)).first 'Car Model I want to associate to the part
p.CarModels.Add(c) 'Add the Car Model to the part collection
context.Entry(p).State = EntityState.Modified
context.SaveChanges
Ошибка не выбрасывается. Когда я отлаживаю, CarModel добавляется в коллекцию Part.CarModel. Однако изменения не привязаны к базе данных. Если я добавлю новую часть и использую аналогичный код, она будет работать, но я не могу добавить или удалить из существующей коллекции и получить ее для фиксации в базе данных.
Спасибо за ваше предложение. Я дал эту попытку и получил аналогичные результаты. Проблема была вызвана установкой в моем контексте, объясненной в моем ответе. – ccarter24