为什么使用带有C#和MVC的通用存储库框架EF,db.SaveChanges()不会导致任何错误,也不会保存任何数据?
使用和实体框架,我无法以以下方式添加新用户-并且不会引发异常:为什么使用带有C#和MVC的通用存储库框架EF,db.SaveChanges()不会导致任何错误,也不会保存任何数据?,c#,asp.net-mvc,entity-framework,C#,Asp.net Mvc,Entity Framework,使用和实体框架,我无法以以下方式添加新用户-并且不会引发异常: public class CustomMembershipProvider : MembershipProvider { public override MembershipUser CreateUser(string username, string password, string email, string passwordQuestion, strin
public class CustomMembershipProvider : MembershipProvider
{
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(); // <----- nothing happens!
}
catch (SqlException e)
{
if (e.Number == 2601) // Cannot insert duplicate key row in object error
{
// handle duplicate key error
//ModelState.AddModelError("", "Username already exists.");
throw e;
}
//throw; // throw exception if this exception is unexpected
//foreach (var eve in e.EntityValidationErrors)
//{
// Console.WriteLine("Entity of type \"{0}\" in state \"{1}\" has the following validation errors:",
// eve.Entry.Entity.GetType().Name, eve.Entry.State);
// //foreach (var ve in eve.ValidationErrors)
// //{
// // logger.ErrorException(String.Format("- Property: \"{0}\", Error: \"{1}\"", ve.PropertyName, ve.ErrorMessage), e);
// //}
//}
## Heading ##
//throw e;
}
catch (Exception ex)
{
while (ex.InnerException != null)
ex = ex.InnerException;
throw ex;
//ModelState.AddModelError("", ex.Message);
}
公共类CustomMembershipProvider:MembershipProvider
{
公共覆盖成员身份用户CreateUser(字符串用户名,
字符串密码、字符串电子邮件、字符串密码问题、,
字符串密码应答,布尔被批准,
对象提供程序用户密钥,out MembershipCreateStatus状态)
{
使用(var db=new DBV001Context())
{
var crypto=new SimpleCrypto.PBKDF2();
var encryptedPw=crypto.Compute(密码);
var user=db.Users.Create();
user.MembershipTypeId=7;
user.UserName=用户名;
user.Email=电子邮件;
user.Password=encryptedPw;
user.PasswordSalt=crypto.Salt;
//user.CreateDate=DateTime.Now;//在数据库中自动设置
//user.CreateDate=新的日期时间(1980,01,01,0,0,0);
user.lastloginandate=新日期时间(1980,01,01,0,0,0);
user.LastActivityDate=新的日期时间(1980,01,01,0,0,0);
user.LastPasswordChangedDate=新的日期时间(1980,01,01,0,0,0);
user.LastLockoutDate=新的日期时间(1980,01,01,0,0,0);
db.Users.Add(用户);
尝试
{
db.SaveChanges();//可能会引发异常,但会在catch块中捕获,因为它是一个SqlException,但不是Number==2601?不过稍后会有一个完整的catch。是的。但是,任何sql异常都会在第一个块中捕获。因此,对于这些异常,永远不会调用完整的catch。