域模型应该对应用程序的问题域进行建模,但完全不了解其实现的某些方面;例如,数据访问。
在这方面,将Microsoft.AspNet.Identity.EntityFramework
添加到域模型感觉有点脏,因为域模型应该不知道(并且不关心)我将使用实体框架实现它... < / p>
......这就是我的问题
在我的域模型中,我有几个链接到用户帐户的类
示例
class Profile
{
public User Owner { get; set; }
}
class BlogPost
{
public User Owner { get; set; }
}
问题在于User
扩展了IdentityUser
,因此引用了 EntityFramework 。
我能想到的唯一解决方案是将User
的引用替换为Guid
,只需链接所有者ID
示例
class Profile
{
public Guid OwnerId { get; set; }
}
同样,这对OOP而言并不是很脏,
鉴于我想要尽可能优雅的解决方案,我该如何解决这个问题?
答案 0 :(得分:1)
我同意您的看法,Identity Framework模型应该与其他模型分开。我想你在问题中自己给出答案。 模型是否完整而没有实现Identity Framework?用户不是域模型的一部分,而是Identity模型的一部分。但是,您正在链接到此表。
我认为最好的解决方案是创建域用户表并将您的模型与此表关联。您可以使用Identity Framework用户GUID作为密钥。这将在两个表之间创建1:1的关系。
使用域用户表扩展User类(来自Identity框架)以轻松访问域用户表,以防您需要添加或删除用户。尽管domain.user不是Identity Framework的一部分,但您可以访问此表,而无需将此表添加到Identity Framework模型本身。只需在User(IdentityUser)类中添加引用。
如果您不想创建新的User表,那么您可以添加一个只显示您想要读取或更新的(非关键)字段的域User类(不扩展IdentityUser)。