ASP.NET MVC / EF: как мне обращаться со свойствами навигации в новом объекте? - PullRequest
1 голос
/ 03 октября 2010

Моим конкретным приложением является приложение ASP.NET MVC, использующее Entity Framework.

У меня есть объект Entity0, который содержит ссылку (* на 1) на Entity1 ...

public class Entity_0
{
    public int ID { get; set; }
    public int Entity_1_ID { get; set; }
    public Entity_1 Entity_1 { get; set; }
}

У меня также есть некоторая логика в Entity_0, однако эта логика требует, чтобы Entity_1 не был нулевым ...

public Entity_2 GetEntity_2()
{
    return new Entity_2() { Number = Entity_1.Value * 10 };
}

Когда новый экземпляр Entity_0 создается посредством привязки модели в контроллере, свойство Entity_1_ID устанавливаетсяоднако свойство навигации Entity_1 остается нулевым до тех пор, пока оно не сохраняется в базе данных.

Мне нужно вызвать GetEntity_2 () и сохранить Entity_0 и Entity_2 в базе данных как одну единицу работы.Сейчас это означает, что мне нужно вручную извлечь Entity_1 из хранилища и назначить его Entity_0 перед вызовом функции.

Другой вариант, который я рассмотрел, - сделать Entity_1 параметром метода GetEntity_2, однако любойв другой раз этот метод называется Entity_1 не будет нулевым, поэтому было бы избыточным требовать параметр.

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

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

Спасибо!

1 Ответ

0 голосов
/ 04 октября 2010

Ах, это оказалось намного проще, чем я себе представлял!

Свойство навигации Entity_1 заполняется после добавления объекта в контекст.У меня было впечатление, что он был нулевым, пока я не вызвал SaveChanges () и сохранил его в базе данных.

Это позволяет легко вызывать код следующим образом ...

var entity_1 = Entity_1CreateViewModel.Entity_1;
entitiesRepository.Add(entity_1);
entitiesRepository.Add(entity_1.GetEntity_2());
entitiesRepository.Save();
...