将ASP.NET身份与核心域模型分离 – 洋葱架构
|
我使用这个示例项目( https://github.com/imranbaloch/ASPNETIdentityWithOnion)作为我的应用程序架构,在这个示例中,核心是从包括身份框架在内的基础设施中完全取消的. 在此示例中,作者使用适配器模式来分离核心标识类(IdentityUser,IdentityRole …),并在Core层中提供类似它们的类. 现在这个示例项目中的问题是Domain模型(Product,Images)没有与模仿Identity模型的虚拟类(AppUser,ApplicationRole,AppliationUserRoles,…)链接. 然后我修改了代码以添加对AppUser的引用 public sealed class Image : BaseEntity
{
public Image()
{
Products = new HashSet<Product>();
}
public string Path { get; set; }
public AppUser AppUser { get; set; } // The Added Reference ...
public ICollection<Product> Products { get; set; }
}
如果我将“AppUser”导航属性放在“Image”类中,则创建的数据库将具有除标识框架的默认FIVE表之外的四个新表. 我需要将这些表合并为默认表. 编辑: 这是驻留在数据层中的身份模型(我无法从核心引用). public class ApplicationIdentityUser :
IdentityUser<int,ApplicationIdentityUserLogin,ApplicationIdentityUserRole,ApplicationIdentityUserClaim>,IDomainUser {
public ApplicationIdentityUser()
: base() {
Images = new HashSet<Image>();
}
public string Name { get; set; }
public virtual ICollection<Image> Images { get; set; }
}
public class ApplicationIdentityRole : IdentityRole<int,ApplicationIdentityUserRole>
{
public ApplicationIdentityRole(){}
public ApplicationIdentityRole(string name){Name = name;}
}
public class ApplicationIdentityUserRole : IdentityUserRole<int> {}
public class ApplicationIdentityUserClaim : IdentityUserClaim<int>{}
public class ApplicationIdentityUserLogin : IdentityUserLogin<int>{}
这也是我在OnModelCreating方法中的模型构建器: modelBuilder.Entity<Image>()
.Property(e => e.Id)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
modelBuilder.Entity<Image>()
.HasMany(e => e.Products)
.WithRequired(e => e.Image)
.WillCascadeOnDelete(false);
modelBuilder.Entity<ApplicationIdentityUser>()
.Property(e => e.Id)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
modelBuilder.Entity<ApplicationIdentityRole>()
.Property(e => e.Id)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
modelBuilder.Entity<ApplicationIdentityUserClaim>()
.Property(e => e.Id)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
解决方法好的,我通过执行以下操作解决了这个问题:>在您的Core中包含对Microsoft.AspNet.Identity.Core的依赖项 我知道依赖于Microsoft.AspNet.Identity.Core听起来很奇怪,但我们只需要接口IUser,它基本上也被认为是你的应用程序的核心域模型. 这里的终极理念是完全获取Microsoft.AspNet.Identity.EntityFramework. 有兴趣的开发者可以1,所以我可以在GitHub上传一个完整的工作样本. (编辑:日照站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc-4 – MVC 4 DropDownListFor错误 – 没有具有密
- asp.net – 手动更新表单认证券:
- asp.net文件上传解决方案(图片上传、单文件上传、多文件上
- azure – 当用户存储在外部身份提供程序服务中时与用户的关
- ASP.net WebAPI跨域调用问题的解决方法
- asp.net – 我怎么知道我的应用程序中是否需要“WCF HTTP激
- ASP.NET MVC4 Razor模板简易分页效果
- 如果我的Asp.Net会话有IsNewSession == true,那我的意思是什
- 为什么ASP.NET回发时请求cookie属性为null或不正确?
- asp.net字符串分割函数使用方法分享
- asp.net-core – 加密ASP.Net Core中的连接字符串
- asp.net-mvc – 我可以获取html.HiddenFor / Htm
- asp.net – 使用AJAX进行WCF调用
- asp.net – 在IHTTPHandler中以编程方式创建Syst
- asp.net-mvc-3 – MVC 3 WebGrid – 可以进行内联
- asp.net-mvc – 当注入服务或控制器的依赖关系太
- asp.net-mvc – ASP.NET MVC会话超时,绝对还是滑
- 模型绑定 – WebApi2:自定义参数绑定以绑定部分
- asp.net – GetExternalLoginInfoAsync()loginIn
- asp.net-mvc-3 – 在MVC3中使用Html.LabelFor的表
