Я проходил учебники (в частности, с использованием Linq-To-Entities), и я понимаю основные понятия, однако некоторые вещи дают мне проблемы.Является ли мое ASP.NET MVC-приложение структурированным правильно?
В учебниках обычно используются только простые модели и формы, в которых используются только базовые инструкции по созданию, обновлению и удалению. Mine немного сложнее, и я не уверен, что я собираюсь сделать это правильно, потому что, когда приходит время обрабатывать отношения с полдюжины объектов базы данных, учебники перестают помогать.
Для метода пост, обычный способ выполнения Crud ОПЕРАЦИЙ
entities.AddToTableSet(myClass);
entities.SaveChanges();
не будет делать то, что я хочу, потому что полностью реализован класс не получает отправил к методу контроллера. Я могу публиковать отдельные поля, коллекции форм или несколько объектов DTO, а затем вызывать метод в службе или репозитории для получения информации, получаемой из сообщения формы, а также информацию, которую он должен запросить или создать сам, а затем из все это, создайте мой объект базы данных, который я могу сохранить.
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Add(int id, [Bind(Exclude = "Id")] ClassA classA,
[Bind(Exclude = "Id")]ClassB classB)
{
// Validation occurs here
if(!ModelState.IsValid)
return View();
try
{
_someRepositoryOrService.Add(id, classA, classB);
return RedirectToAction("Index", new { id = id });
}
catch(Exception ex)
{
// Logging and exception handling occurs here
}
}
public void Add(int id, ClassA classA, ClassB classB)
{
EntityA eA = new EntityA
{
// Set a bunch of properties using the two classes and
// whatever queries are needed
};
EntityB eB = new EntityB
{
// Set a bunch of properties using the two classes and
// whatever queries are needed
};
_entity.AddToEntityASet(eA);
_entity.AddToEntityBSet(eB);
_entity.SaveChanges();
}
Я правильно справляюсь с этим, или я ухожу в раму? Я никогда не использую объект сущности напрямую, всякий раз, когда я запрашиваю его, я помещаю информацию, которая мне нужна в DTO, и основываю свои соображения на этом. То же самое происходит с созданием. Разрешено ли это или мое избегание использования сущностей, непосредственно идущих против цели использования структуры?
Edit: Я тоже волнуется по поводу такого подхода, поскольку он требует пустых конструкторов правильно делать запросы LINQ из-за это сообщение об ошибке:
только без параметров Конструкторов и Инициализаторов поддерживаются в LINQ к Entities ,
Это не имеет большого значения, так как мне редко нужна логика int конструкторов, но разве это проблема, когда у вас нет конструкторов и только публичных свойств?
Объектконтекст, используемый Linq to Entities, использует отражение для создания объектов из сопоставления данных, поэтому важно, чтобы все сущности имели конструктор без параметров, поэтому его можно инициализировать плюс, если вы хотите иметь возможность сериализовать свои типы, тоже понадобится публичный конструктор – dmportella