作者:dbvg2q | 来源:互联网 | 2023-09-04 21:55
我正在使用'Clean Architecture'解决方案模板,但是我认为这很有希望,但是,在分离从ApplicationUser
派生的IdentityUser
类时遇到了一个问题它们都是基础架构层的组成部分,在定义引用ApplicationUser
的帐户实体时,我在核心层“域”上具有依赖关系,因此我从内部进行单向引用到外面,我无法在此处使用它,所以我传递了一个通用类型,但仍然无法在基础结构中实现ApplicationDbContext
,有什么想法吗?
account.cs
using MacSys.Domain.Common;
using System;
using System.Collections.Generic;
using System.Text;
namespace MacSys.Domain.Entities
{
public class account : LocaleEntityBase
{
public account()
{
ApplicatiOnUsers= new List();
}
public City City { get; set; }
public string PhoneNumber { get; set; }
public IList ApplicationUsers { get; set; }
}
}
IApplicationDbContext.cs
using MacSys.Domain.Entities;
using microsoft.EntityFrameworkCore;
using System.Threading;
using System.Threading.Tasks;
namespace App.Application.Common.Interfaces
{
public interface IApplicationDbContext
{
DbSet Countries { get; set; }
DbSet Cities { get; set; }
DbSet accountTypes { get; set; }
DbSet Configurations { get; set; }
DbSet> accounts { get; set; }
Task SaveChangesAsync(CancellationToken cancellationToken);
}
}
ApplicationDbContext.cs
using App.Application.Common.Interfaces;
using App.Domain.Entities;
using App.Infrastructure.Identity;
using microsoft.EntityFrameworkCore;
using System.Reflection;
using microsoft.AspNetCore.Identity.EntityFrameworkCore;
using App.Infrastructure.Identity.ApplicationGroups;
namespace App.Infrastructure.Persistence
{
public class ApplicationDbContext : IdentityDbContext,IApplicationDbContext
{
private readonly ICurrentUserService _currentUserService;
private readonly IDateTime _dateTime;
public ApplicationDbContext(
DbContextOptions options,ICurrentUserService currentUserService,IDateTime dateTime) : base(options)
{
_currentUserService = currentUserService;
_dateTime = dateTime;
}
public DbSet Countries { get; set; }
public DbSet Cities { get; set; }
public DbSet accountTypes { get; set; }
public DbSet Configurations { get; set; }
public DbSet> accounts { get; set; }
}
}
在ApplicationDbContext类实现中出现错误,因为如果没有在项目之间进行双重引用,就无法找到两个属性之间的关系。
一种将您的域与框架分开的常见方法是根本不耦合它们。实际上,您不必将所有实体都放在同一个数据库上下文中,也不需要使您的帐户实体也继承自ApplicationUser
。
相反,您可以做的是将这两个问题完全分开:使用标准IdentityDbContext
及其IdentityUser
作为身份验证和授权的主要用户身份。但要为您的域维护一个单独的Account
实体。您甚至可以共享相同的用户ID以获得一对一映射。然后,如果将Account
和域模型的其余部分放入其自己的数据库上下文中,则域实体将与应用程序的auth框架层完全分开。