Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将此代码从使用EF db上下文更新到通用存储库?_C#_Entity Framework_Generics_Repository Pattern_Autofac - Fatal编程技术网

C# 如何将此代码从使用EF db上下文更新到通用存储库?

C# 如何将此代码从使用EF db上下文更新到通用存储库?,c#,entity-framework,generics,repository-pattern,autofac,C#,Entity Framework,Generics,Repository Pattern,Autofac,在使用成员资格提供者重新访问用户创建中的一些旧代码时,我发现没有使用以下代码创建新用户: // the call Membership.CreateUser(user.Username, user.Password, user.EmailAddress, null, null, false, null, out createStatus); public override MembershipUser CreateUser(string username, string

在使用
成员资格提供者
重新访问用户创建中的一些旧代码时,我发现没有使用以下代码创建新用户:

// the call
Membership.CreateUser(user.Username, user.Password, user.EmailAddress, null, null, false, null, out createStatus);


    public override MembershipUser CreateUser(string username,
       string password, string email, string passwordQuestion,
       string passwordAnswer, bool isApproved,
       object providerUserKey, out MembershipCreateStatus status)
    {

        using (var db = new DbV001Context())
        {
            var crypto = new SimpleCrypto.PBKDF2();
            var encryptedPw = crypto.Compute(password);
            var user = db.Users.Create();

            user.MembershipTypeId = 7; 
            user.UserName = username;
            user.Email = email;
            user.Password = encryptedPw;
            user.PasswordSalt = crypto.Salt;
            //user.CreateDate = DateTime.Now; // set automatically in the db

            //user.CreateDate = new DateTime(1980,01,01,0,0,0,0);
            user.LastLoginDate = new DateTime(1980,01,01,0,0,0,0);
            user.LastActivityDate = new DateTime(1980,01,01,0,0,0,0);
            user.LastPasswordChangedDate = new DateTime(1980,01,01,0,0,0,0);
            user.LastLockoutDate = new DateTime(1980, 01, 01, 0, 0, 0, 0);

            db.Users.Add(user);
            try
            {
                db.SaveChanges();
            } ...
我在实现a之前编写了这部分代码,我在其他地方都使用它:

    private readonly IUnitOfWork _unitOfWork;
    private readonly IRepository<User> _repository;

    public AccountController() { }

    public AccountController(IUnitOfWork unitOfWorkAsync,
        IRepository<User> repository)
    {
        _unitOfWork = unitOfWorkAsync;
        _repository = repository;
    }

   .
   .
   .
                var userEntity = _repository
                    .ODataQueryable()
                    .Where(u => (u.Email == user.EmailAddress | u.UserName == user.Username)
                                && u.Email != null).ToList();
我已经有一段时间没有研究这些东西了,我该如何更新上面的代码以使用存储库,而不是数据库上下文?另外,由于我正在使用DI,在设置
CustomMembershipProvider
时是否缺少一些东西


当我单步执行代码时,没有执行
CustomMembershipProvider
构造函数。使用Autofac for DI。

我认为成员资格提供程序不允许您在构造函数中提供参数。。。在无参数构造函数中,您可以将当前实例分配给UOW和存储库,或者在尚未完成时激活它们

但这取决于您使用的DI框架

public class CustomMembershipProvider : MembershipProvider
{
    //private DbV001Context _db = new DbV001Context();
    private readonly IUnitOfWork _unitOfWork;
    private readonly IRepository<User> _repository;

    public CustomMembershipProvider() { }

    public CustomMembershipProvider(IUnitOfWork unitOfWorkAsync,
        IRepository<User> repository)
    {
        _unitOfWork = unitOfWorkAsync;
        _repository = repository;
    }
    public override MembershipUser CreateUser(string username,
       string password, string email, string passwordQuestion,
       string passwordAnswer, bool isApproved,
       object providerUserKey, out MembershipCreateStatus status)
    {

        //using (var db = new DbContext())
        //{
            var crypto = new SimpleCrypto.PBKDF2();
            var encryptedPw = crypto.Compute(password);
            //var user = db.Users.Create();
            var user = new User();

            user.MembershipTypeId = 7; 
            user.UserName = username;
            user.Email = email;
            user.Password = encryptedPw;
            user.PasswordSalt = crypto.Salt;
            //user.CreateDate = DateTime.Now; // set automatically in the db

            //user.CreateDate = new DateTime(1980,01,01,0,0,0,0);
            user.LastLoginDate = new DateTime(1980,01,01,0,0,0,0);
            user.LastActivityDate = new DateTime(1980,01,01,0,0,0,0);
            user.LastPasswordChangedDate = new DateTime(1980,01,01,0,0,0,0);
            user.LastLockoutDate = new DateTime(1980, 01, 01, 0, 0, 0, 0);


            //db.Users.Add(user);
            try
            {
                //db.SaveChanges();
                _repository.InsertGraph(user);  //Object reference not set to an instance of an object.
            }