I`m с помощью Entity Framework и я сущности, как это:бизнес-логика Архитектура с Entity Framework
public class User : IEntity
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int UserId { get; set; }
[Required]
public String Email { get; set; }
public virtual ICollection<Project> UserProjects { get; set; }
}
public class Project : IEntity
{
[Key]
public int ProjectId { get; set; }
public String Title { get; set; }
public String Description { get; set; }
[ForeignKey("UserOwner")]
public int UserOwnerId { get; set; }
public virtual User UserOwner { get; set; }
}
Также я использую Repository шаблон и единицу работы шаблона. Например, у меня есть метод CreateProject (String title, String description, String userOwnerEmail) в классе логических проектов, который содержит только Project Repository. Также у меня есть класс UserLogic, который позволяет мне получить пользователя по его электронной почте.
Как я могу получить пользователя по электронной почте в методе CreateProject, чтобы назначить его как владельца проекта.
Основная цель - создать метод ослабленной связи.
Я думаю, что этот пример плохо:
public void CreateNewProject(String projectName, String description,String usersEmail)
{
var usersLogic = kernel.Get<IUsersServices>();
User owner = usersLogic.GetUserByEmail(usersEmail);
unit.Repository<Project>()
.Insert(new Project
{
Title = projectName,
Description = description,
CreationDate = DateTime.Now,
UserOwner = owner,
UsersIncludeedInProject = new List<User>()
});
unit.Save();
}
Но если я хочу абстрагировать объекты уровня данных и использовать объекты передачи данных. В этом случае мой бизнес-уровень не должен знать об объектах. var user = _usersService.GetByEmail(); - это будет неуместно. Пожалуйста, поправьте меня, если я ошибаюсь. – Dmitry
Возможно, я забыл сказать, что приложение является проектом wep api, но я думаю, что это не имеет значения. – Dmitry
Репозиторий/Служба вернет объекты приложения, объект User, подходящий для этого контекста. Это не объект User EF. Служба будет использовать EF для запроса db, а затем отображает результат в бизнес-объект пользователя. – MikeSW