Я использую идентификатор asp.net для создания нового пользователя, но получаю ошибку:
Невозможно вставить значение NULL в столбец "Id", таблица 'Mydb.dbo.AspNetUsers'; столбец не допускает нулей. ВСТАВИТЬ не выполняется.\r\nПриложение завершено
Но здесь у меня нет такой таблицы, как AspNetUsers, но вместо этого у меня есть моя собственная таблица Пользователи.
Код: Web.config: 2 строки коннекта
<add name="myEntities" connectionString="metadata=res://*/DataModel.csdl|res://*/DataModel.ssdl|res://*/DataModel.msl;provider=System.Data.SqlClient;provider connection string="data source=;initial catalog=mydb;user id=sa;password=sdfsdfsdf;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
<add name="MyConnString" connectionString="data source=;initial catalog=Mydb;user id=sa;password=sdfsdfsdf;" providerName="System.Data.SqlClient" />
IdentityModel.cs:
public class ApplicationUser : IdentityUser
{
public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager)
{
// Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType
this.SecurityStamp = Guid.NewGuid().ToString();
var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
// Add custom user claims here
return userIdentity;
}
public string Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public virtual string Email { get; set; }
public string Password { get; set; }
public string Role { get; set; }
public Nullable<bool> IsActive { get; set; }
public Nullable<int> CreatedBy { get; set; }
public Nullable<System.DateTime> CreatedDate { get; set; }
public Nullable<System.DateTime> LastLogin { get; set; }
public ApplicationUser()
{
}
public ApplicationUser(string email, string firstName, string lastName, string designation, bool isActive)
{
Email = email;
FirstName = firstName;
LastName = lastName;
Designation = designation;
IsActive = isActive;
}
}
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext()
: base("MyConnString", throwIfV1Schema: false)
{
}
public static ApplicationDbContext Create()
{
return new ApplicationDbContext();
}
}
UserStore1.cs:
public class UserStore1 : IUserStore<ApplicationUser>, IUserPasswordStore<ApplicationUser>
{
private readonly HttpContext _httpContext;
UserStore<IdentityUser> userStore = new UserStore<IdentityUser>(new ApplicationDbContext());
public System.Threading.Tasks.Task CreateAsync(ApplicationUser user)
{
HttpContext.Current = _httpContext ?? HttpContext.Current;
var context = userStore.Context as ApplicationDbContext;
context.Users.Add(user);
context.Configuration.ValidateOnSaveEnabled = false;
context.SaveChanges();
return Task.FromResult(true);
}
}
Контроллер:
[Authorize]
public class AccountController : Controller
{
public AccountController()
: this(new UserManager<ApplicationUser>(new UserStore1()))
{
}
public AccountController(UserManager<ApplicationUser> userManager)
{
UserManager = userManager;
}
public UserManager<ApplicationUser> UserManager { get; private set; }
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Login(string email, string password, bool rememberMe = false, string returnUrl = null)
{
if (ModelState.IsValid)
{
var user = new ApplicationUser
{
FirstName= "Abc",
LastName= "Pqr",
UserName="[email protected]",
SecurityStamp = Guid.NewGuid().ToString()
};
var result= await UserManager.CreateAsync(user,"123456");
}
return View();
}
}
Примечание. У меня есть autogenerated Id в поле моей базы данных и что Id является Int.
Обновление: сначала я использую базу данных (edmx), а таблица, которую я использую, представляет собой пользовательские таблицы для вставки новых записей (например, Пользователи).
Сначала я реализовал идентификацию asp.net для microsoft, как показано ниже, но один пользователь указал, что я не использую класс ApplicationUser, который отвечает за обработку входа, cookies и т.д., поэтому теперь я пытаюсь использовать класс ApplicationUser:
Как предоставить пользовательскую реализацию метода UpdateAsync идентификатора asp.net?
Я действительно сожалею о своем решении выбрать Microsoft Identity Framework для целей аутентификации, потому что я действительно нахожу это сложным, но теперь, когда я продвигаюсь вперед, я должен пойти с ним.