如何在域模型中使用AspNet.Identity

时间:2016-06-11 09:07:58

标签: c# entity-framework poco domain-model

域模型应该对应用程序的问题域进行建模,但完全不了解其实现的某些方面;例如,数据访问。

在这方面,将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而言并不是很脏,

鉴于我想要尽可能优雅的解决方案,我该如何解决这个问题?

1 个答案:

答案 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)。