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

标签 c# entity-framework poco domain-model

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

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

...这就是我的问题

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

示例

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

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

问题在于 User 扩展了 IdentityUser,因此引用了 EntityFramework

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

示例

class Profile
{
    public Guid OwnerId { get; set; }
}

同样,这感觉很脏,反对 OOP,而且不是很可靠

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

最佳答案

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

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

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

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

关于c# - 如何在域模型中使用 AspNet.Identity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37761955/

相关文章:

c# - MVC 表单不发布,调用 GET

c# - 我应该如何使用 Rx + DynamicData 定期检查许多在线服务的更新?

c# - 检测具有相同 child 的实体

asp.net-mvc - EF代码优先如何在客户端层使用POCO对象

c# - 使用子选择填充 POCO 中的列表 - LINQ to entities

entity-framework - Entity Framework : Tracking changes to FK associations

c# - 简化 C# 中的多个(非嵌套)foreach 循环

c# - Clipboard.SetContent 中的错误

entity-framework - EF 6.1.3 与 "linked server"

mysql - Entity Framework 与 MySQL