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

C# 如何在域模型中使用AspNet.Identity,c#,entity-framework,poco,domain-model,C#,Entity Framework,Poco,Domain Model,域模型应该为应用程序的问题域建模,但完全不知道其实现的某些方面;例如,数据访问 在这方面,将Microsoft.AspNet.Identity.EntityFramework添加到域模型中感觉有点脏,因为域模型应该不知道(也不关心)我将使用实体框架实现它 …这就是我的问题所在 在我的域模型中,我有几个类链接到用户帐户 示例 class Profile { public User Owner { get; set; } } class BlogPost { public User

域模型应该为应用程序的问题域建模,但完全不知道其实现的某些方面;例如,数据访问

在这方面,将
Microsoft.AspNet.Identity.EntityFramework
添加到域模型中感觉有点脏,因为域模型应该不知道(也不关心)我将使用实体框架实现它

…这就是我的问题所在

在我的域模型中,我有几个类链接到用户帐户

示例

class Profile
{
    public User Owner { get; set; }
}

class BlogPost
{
    public User Owner { get; set; }
}
class Profile
{
    public Guid OwnerId { get; set; }
}
问题在于
User
扩展了
IdentityUser
,因此引用了EntityFramework

我能想到的唯一解决方案是将对
User
的引用替换为
Guid
,只链接所有者ID

示例

class Profile
{
    public User Owner { get; set; }
}

class BlogPost
{
    public User Owner { get; set; }
}
class Profile
{
    public Guid OwnerId { get; set; }
}
同样,这感觉脏,对OOP和不是很坚实


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

我同意您的观点,即身份框架模型应该与其他模型分开。我认为你自己在你的问题中给出了答案。 模型是否在没有实现身份框架的情况下完成?用户不是域模型的一部分,而是身份模型的一部分。但是,您正在链接到此表

我认为最好的解决方案是创建一个域用户表,并将您的模型与该表相关联。您可以使用Identity Framework用户GUID作为密钥。这将在两个表之间创建1:1的关系

使用域用户表扩展用户类(来自Identity framework),以便在需要添加或删除用户时轻松访问域用户表。尽管domain.user不是Identity Framework的一部分,但您可以访问此表,而无需将此表添加到Identity Framework模型本身。只需在User(IdentityUser)类中添加一个引用

如果不希望创建新的用户表,则可以添加一个域用户类(不扩展IdentityUser),该类仅公开要读取或更新的(非关键)字段