为什么使用带有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。