C# ASP MVC将ApplicationUser添加到通用存储库
几天前,我决定在我的项目中使用工作单元&通用存储库。在做了一点搜索之后 在这种模式中,我们有4层:C# ASP MVC将ApplicationUser添加到通用存储库,c#,asp.net-mvc,entity-framework,asp.net-identity,C#,Asp.net Mvc,Entity Framework,Asp.net Identity,几天前,我决定在我的项目中使用工作单元&通用存储库。在做了一点搜索之后 在这种模式中,我们有4层: 1. UI 2. Model 3. Repository 4. Service 重点是从模型层中的实体类继承所有域模型。例如: public class Project : Entity<int> { ... } 现在,当我想将ApplicationUser类添加到UoF模式时,我得到了一个错误,即ApplicationUser不是从BaseEntity继承的 提示:Applic
1. UI
2. Model
3. Repository
4. Service
重点是从模型层中的实体
类继承所有域模型。例如:
public class Project : Entity<int> {
...
}
现在,当我想将ApplicationUser
类添加到UoF模式时,我得到了一个错误,即ApplicationUser
不是从BaseEntity
继承的
提示:ApplicationUser
是从IdentityUser
类继承的
将ApplicationUser
添加到我的设计模式中的最佳实践是什么
更新
我在iaapplicationuserservice
界面中得到错误消息
public interface IApplicationUserService : IEntityService<ApplicationUser>
{
Task<Part> GetById(int? id);
}
公共接口IAApplicationUserService:IEntityService
{
任务GetById(int?id);
}
IEntityService:
public interface IEntityService<T> : IService
where T : BaseEntity
{
void Create(T entity);
void Delete(T entity);
Task<List<T>> GetAllAsync();
IEnumerable<T> GetAll();
Task Update(T entity);
}
公共接口IEntityService:iSeries设备
其中T:BaseEntity
{
无效创建(T实体);
无效删除(T实体);
任务GetAllAsync();
IEnumerable GetAll();
任务更新(T实体);
}
接口IEntityService
有一个约束,因此作为T
提供的每个类型都需要从BaseEntity
派生。由于您的ApplicationUser
类是从IdentityUser
派生的,因此它无法满足约束
您可以通过两种方式解决此问题:
BaseEntity
或entity
派生的。这样,就不会违反合同。该类可以命名为applicationSerentity
或类似的名称。如果需要存储应用程序用户,则需要将ApplicationUser
的属性映射到applicationserentity
。您还可以考虑是否确实需要从IdentityUser
派生ApplicationUser
类,并从BaseEntity
派生它,而不是创建一个新类李>
BaseEntity
类,那么它没有任何成员。因此,您可以轻松地用接口(例如,IEntity
)替换BaseEntity
。无论当前在哪里使用BaseEntity
,都可以使用此接口,尤其是在约束中。由于一个类只能从一个基类派生,但可以实现多个接口,因此可以在ApplicationUser
中实现IEntity
,以便将其用作IEntityService
的类型参数李>
我赞成第一种方法,因为它避免了身份验证环境与持久性的混合
但是,如果要实现第二种方法,请首先将BaseEntity
重命名为IEntity
,例如通过访问上下文菜单。这样可以确保在以前使用过BaseEntity
的地方使用新名称。然后改变
public abstract class IEntity { }
到
解决你们问题的办法不是把一个方形的钉子塞进一个圆孔里。自己回答这个问题:当应用到项目的标识部分时,通用存储库将给您带来什么好处 我怀疑会有很多痛苦、咒骂和大量自定义代码,因为
ApplicationUserManager
可能无法与您的解决方案配合使用,您必须编写自定义存储或至少部分实现一些逻辑
仅仅因为有一个模式,并不意味着你必须在任何地方应用它。特别是图案不合适的地方。请显示错误本身。不清楚它是从哪里来的。请再看一遍。我更喜欢第二条路。你能用代码解释一下吗?@user3748973我用一个例子扩展了答案。希望能有帮助。
public abstract class IEntity { }
public interface IEntity { }