Обработка ограничений и идентификаторов в пользовательской объектной модели для сохранения в реляционной базе данных - PullRequest
1 голос
/ 21 сентября 2011

У меня есть надежный набор объектов, которые связаны друг с другом, и мне нужно выяснить, как лучше всего сохранить их в базе данных и по-прежнему учитывать такие вещи, как ограничения данных.

Допустим, у меня есть следующие классы:

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 Ответ

1 голос
/ 21 сентября 2011

Вы должны работать наизнанку.

Если в вашем классе есть «свойство навигации» (в данном случае Bar in Foo), оно будет сопровождаться внешним идентификатором (BarID). Поэтому вы должны сначала сохранить вложенные объекты перед сохранением самого объекта.

Проблема, которой вы рискуете здесь, - это циклические свойства (Автор пишет книгу, в книге есть Автор), и в этом случае вы должны правильно определить, какие из них являются основными отношениями, а какие следует игнорировать.

Тогда следующая проблема - каскадное удаление.

Это было то, что вы спрашивали?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...