2016-06-11 68 views
0

域模型应该模拟应用程序的问题域,但完全不知道其实现的某些方面;数据访问,例如。如何在域模型中使用AspNet.Identity

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

......这里存在我的问题

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

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不非常坚固

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

回答

1

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

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

如果您需要添加或删除用户,请将用户类(从身份框架)扩展到域用户表以轻松访问域用户表。尽管domain.user不属于Identity Framework,但您可以访问此表而不必将此表添加到Identity Framework模型本身。只需在用户(IdentityUser)类中添加引用即可。

如果你不想创建一个新的用户表,那么你可以添加一个只显示你想要读取或更新的(非关键)字段的域用户类(它不扩展IdentityUser)。