Сохранение деталей в отношении Master Detail EF4 POCO - PullRequest
1 голос
/ 20 мая 2010

Сценарий: Entity Framework 4, шаблоны POCO и отношение Master Detail.

Допустим, у меня есть такой тип мастера:

//partial implementation of master entity
partial class Master
{
    public void AddDetail(x,y,z)
    {
        var detail = new Detail()
        {
           X = x,
           Y = y,
           Z = z,
        };

        //add the detail to the master
        this.Details.Add(detail);
    }
}

Если я затем добавлю мастер-экземпляр в свой контекст и зафиксирую, детали не будут сохранены:

var masterObject = new Master();
masterObject.AddDetail(1,2,3);
myContext.MasterSet.AddObject(masterObject);

Есть ли какой-нибудь способ сделать детали доступными при использовании шаблонов POCO? Или любым другим способом? коллекция Details в сущности Master является FixUpCollection, поэтому она должна отслеживать изменения IMO.

Итак, есть какие-нибудь идеи, как заставить это работать, не убивая слишком много POCO?

Ответы [ 2 ]

0 голосов
/ 21 мая 2010

Я нашел решение.

Мне просто нужно передать SaveOptions.DetectChangesBeforeSave примерно так:

context.SaveChanges(SaveOptions.DetectChangesBeforeSave);

Это позволяет мне добавлять объекты детали к главному объекту без присоединения каждой отдельной детали к контексту.

0 голосов
/ 20 мая 2010

Вы могли :

Добавьте к вашим сущностям конструктор, который принимает Контекст, который сохраняется по ссылке в приватном поле. Ваша функция AddDetail может затем проверить закрытое поле _context и, если оно ссылается на экземплярный контекст, добавить детали в контекст после сохранения основной записи.

Однако ...

Возможно, это не лучший шаблон, поскольку он нарушает принцип единой ответственности. Я думаю, что было бы лучше использовать шаблон репозитория, и пусть репозиторий фиксирует несохраненные детали. Здесь - отличная статья о реализации шаблона репозитория в Entity Framework 4.

...