0
我真的使用实体框架和我有这样的实体:业务逻辑架构与实体框架
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(字符串标题,字符串描述,字符串userOwnerEmail) 。 另外我有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
存储库/服务将返回适用于该上下文的应用程序实体和用户对象。这不是用户EF实体。该服务将使用EF来查询数据库,然后它将结果映射到业务用户对象 – MikeSW