Обработка ограничений и идентификаторов в пользовательской объектной модели для сохранения в реляционной базе данных
У меня есть надежный набор объектов, которые связаны друг с другом, и мне нужно выяснить, как лучше всего сохранить их в базе данных и по-прежнему учитывать такие вещи, как ограничения данных.
Допустим, у меня есть следующие классы:
class Foo
{
public int Id { get; set; }
public int BarId { get; set; }
Bar _bar;
public Bar Bar
{
get { return _bar; }
set
{
if(_bar != value)
{
_bar = value;
BarId = value.Id;
}
}
}
}
class Bar
{
public int Id { get; set; }
}
Тогда, скажем, у меня есть следующий код:
var f = new Foo() { Bar = new Bar() };
SaveFoo(f);
Что я должен сделать в SaveFoo, чтобы сохранить объекты в базе данных в правильном порядке?
ВАЖНОЕ ПРИМЕЧАНИЕ: я генерирую код из всего этого из моей структуры данных SQL, используя MyGeneration, и у меня есть доступ ко всем ограничениям во время генерации.
1 ответ
Вы должны работать наизнанку.
Если в вашем классе есть "свойство навигации" (в данном случае Bar in Foo), оно будет сопровождаться внешним идентификатором (BarID). Таким образом, вы должны сохранить вложенные объекты, прежде чем сохранять сам объект.
Здесь вы рискуете циклическими свойствами (автор пишет книгу, в книге есть автор), и в этом случае вы должны правильно определить, какие отношения являются первичными, а какие следует игнорировать.
Тогда следующая проблема - каскадное удаление.
Это было то, что вы спрашивали?