Я нахожусь в процессе создания моего первого веб-приложения с использованием ASP.NET MVC 2 и Entity Framework.Я использую шаблон хранилища.Из информации, которую я собрал о переполнении стека и других веб-сайтах, выясняется, что единодушным является единый контроллер на каждый объект модели домена и один репозиторий на совокупный корневой объект.агрегатные объекты без полномочий root через сводный корневой репозиторий.В примере, с которым я имею дело, есть модель Customer и модель Boat.Лодки могут существовать только с указанием FK на Клиента, и на Лодки нужно ссылаться только в контексте Клиента.Это заставило меня поверить, что у меня был агрегат с этими двумя объектами и что клиент был корнем.
Теперь в моем контроллере Boats у меня есть метод действия Edit:
public class BoatsController : Controller
{
private ICustomersRepository customersRepository;
public BoatsController(ICustomersRepository customersRepository)
{
this.customersRepository = customersRepository;
}
public JsonResult Edit(int id, FormCollection collection)
{
var boat = customersRepository.GetBoat(id);
// Update boat
}
}
MyВопрос в том, как мне получить объект «Лодка» в репозитории?
public class SQLCustomersRepository : ICustomersRepository
{
DatabaseEntities db = new DatabaseEntities();
public Boat GetBoat(int id)
{
return db.Boats.SingleOrDefault(x => x.ID == id);
// OR
return db.Customers.Where(x => x.Boats.Any(y => y.ID == id)
.Select(x => x.Boats.FirstOrDefault(y => y.ID == id);
}
}
Допустимо ли ссылаться на db.Boats из репозитория клиентов?Это кажется самым чистым, но это означало бы, что мне пришлось бы изменить свой FakeCustomersRepository, чтобы иметь список клиентов и лодок.
Мне казалось более разумным доступ к лодке через db.Customers, однакоЯ не мог понять, как вернуть один объект Boat, не повторяя себя в запросе LINQ, который действительно мне не понравился.
Я знаю, что мне еще многое предстоит узнать, так что надеюсь, вы сможете указатьменя в правильном направлении!
Спасибо!