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