Поэтому я внедрил все из этого образца проектов из github: http://www.tugberkugurlu.com/archive/aspnet-identity-ravendb--fully-asynchronous-new-and-sweet-asp-net-identity-implementation- для-ravendb
Но я получаю сообщение об ошибке в файле IdentityModels.cs
public class ApplicationUser : RavenUser
{
public ApplicationUser(string userName)
: base(userName) <--- here, explained below
{
}
}
Ошибка говорит: Ошибка 29 'AspNet.Identity.RavenDB.Entities.RavenUser' не содержит конструктор, который принимает 1 аргумент
Но в примере Tugberk Ugurlus-prject все работает нормально. Я не знаю, чего мне не хватает. ApplicationUser выше наследования ведьмы от RavenUser, если я в примере проекта переходит к определению для RavenUser, он приводит меня к этому файлу:
public class RavenUser : IUser
{
private List<RavenUserClaim> _claims;
private List<RavenUserLogin> _logins;
[JsonConstructor]
public RavenUser(string userName)
{
if (userName == null) throw new ArgumentNullException("userName");
Id = GenerateKey(userName);
UserName = userName;
_claims = new List<RavenUserClaim>();
_logins = new List<RavenUserLogin>();
}
public RavenUser(string userName, string email) : this(userName)
{
Email = email;
}
public string Id { get; private set; }
public string UserName { get; set; }
public string Email { get; private set; }
public string PhoneNumber { get; private set; }
public string PasswordHash { get; private set; }
public string SecurityStamp { get; private set; }
public bool IsLockoutEnabled { get; private set; }
public bool IsTwoFactorEnabled { get; private set; }
public int AccessFailedCount { get; private set; }
public DateTimeOffset? LockoutEndDate { get; private set; }
public IEnumerable<RavenUserClaim> Claims
{
get
{
return _claims;
}
private set
{
if (_claims == null)
{
_claims = new List<RavenUserClaim>();
}
_claims.AddRange(value);
}
}
public IEnumerable<RavenUserLogin> Logins
{
get
{
return _logins;
}
private set
{
if (_logins == null)
{
_logins = new List<RavenUserLogin>();
}
_logins.AddRange(value);
}
}
public virtual void EnableTwoFactorAuthentication()
{
IsTwoFactorEnabled = true;
}
public virtual void DisableTwoFactorAuthentication()
{
IsTwoFactorEnabled = false;
}
public virtual void EnableLockout()
{
IsLockoutEnabled = true;
}
public virtual void DisableLockout()
{
IsLockoutEnabled = false;
}
public virtual void SetEmail(string email)
{
Email = email;
}
public virtual void SetPhoneNumber(string phoneNumber)
{
PhoneNumber = phoneNumber;
}
public virtual void SetPasswordHash(string passwordHash)
{
PasswordHash = passwordHash;
}
public virtual void SetSecurityStamp(string securityStamp)
{
SecurityStamp = securityStamp;
}
public virtual void IncrementAccessFailedCount()
{
AccessFailedCount++;
}
public virtual void ResetAccessFailedCount()
{
AccessFailedCount = 0;
}
public virtual void LockUntil(DateTimeOffset lockoutEndDate)
{
LockoutEndDate = lockoutEndDate;
}
public virtual void AddClaim(Claim claim)
{
if (claim == null)
{
throw new ArgumentNullException("claim");
}
AddClaim(new RavenUserClaim(claim));
}
public virtual void AddClaim(RavenUserClaim ravenUserClaim)
{
if (ravenUserClaim == null)
{
throw new ArgumentNullException("ravenUserClaim");
}
_claims.Add(ravenUserClaim);
}
public virtual void RemoveClaim(RavenUserClaim ravenUserClaim)
{
if (ravenUserClaim == null)
{
throw new ArgumentNullException("ravenUserClaim");
}
_claims.Remove(ravenUserClaim);
}
public virtual void AddLogin(RavenUserLogin ravenUserLogin)
{
if (ravenUserLogin == null)
{
throw new ArgumentNullException("ravenUserLogin");
}
_logins.Add(ravenUserLogin);
}
public virtual void RemoveLogin(RavenUserLogin ravenUserLogin)
{
if (ravenUserLogin == null)
{
throw new ArgumentNullException("ravenUserLogin");
}
_logins.Remove(ravenUserLogin);
}
// statics
internal static string GenerateKey(string userName)
{
return string.Format(Constants.RavenUserKeyTemplate, userName);
}
}
Но в моем собственном проекте наследование также является RavenUser. Но если я перейду к этому определению, это приведет меня к этому файлу MetaData:
#region Assembly AspNet.Identity.RavenDB.dll, v1.0.1.0
// C:\Users\Computer\Desktop\AppHarborRepository\Blog\packages\AspNet.Identity.RavenDB.1.0.1\lib\n et45\AspNet.Identity.RavenDB.dll
#endregion
using System.Collections.Generic;
namespace AspNet.Identity.RavenDB.Entities
{
public class RavenUser : User
{
public RavenUser();
public ICollection<RavenUserClaim> Claims { get; set; }
public ICollection<RavenUserLogin> Logins { get; set; }
}
}
На первый взгляд похоже, что в вашем коде есть неправильный оператор "using", который указывает на AspNet.Identity.RavenDB RavenUser вместо вашей собственной реализации.
Посмотрите, есть ли "using AspNet.Identity.RavenDB.Entities"
в вашем классе ApplicationUser и удалите его. Если это нарушает другие части вашего кода, вы можете захотеть присвоить вашему классу RavenUser другое имя.