使用EF连接现有数据库

时间:2013-06-13 21:20:08

标签: asp.net-mvc entity-framework asp.net-mvc-4 ef-code-first

我有一个项目,其App_Data文件夹中包含一个数据库(SIS.mdf)。 现在我有了一个新的MVC4项目。我通过右键单击App_Data文件夹添加现有项目选项,手动将该数据库添加到我的新App_Data文件夹。 之后我做了以下事情:

  1. 为新添加的数据库创建DBcontext

    public class SisContext : DbContext
    {
        //protected override void OnModelCreating(DbModelBuilder modelBuilder)
        //{
        //    modelBuilder.Conventions.Remove<System.Data.Entity.Infrastructure.IncludeMetadataConvention>();
        //}
        public DbSet<User> Users { get; set; }
        public DbSet<AspNetUser> AspNetUsers { get; set; }
        public DbSet<Role> Roles { get; set; }
        public DbSet<BusinessUnit> BusinessUnits { get; set; }
        public DbSet<LicenseHolder> LicenseHolders { get; set; }
        public DbSet<License> Licenses { get; set; }
    
        public SisContext():base("SIS")//SIS is name of the database
        {
            if (HttpContext.Current == null)
            {
                Database.SetInitializer<SisContext>(null);
            }
        }
    }
    
  2. Q1:现在是否可以与我的App_Data文件夹中的数据库(SIS)进行交互,该数据库中包含完全包含上述相同和更多表格的数据库?

    如果是,我有一个自定义MembershipProvider类,它使用上面的SisContext类,我试图验证用户

    public class CodeFirstMembershipProvider : MembershipProvider
    {
       public override bool ValidateUser(string username, string password)
        {
            if (string.IsNullOrEmpty(username))
            {
                return false;
            }
            if (string.IsNullOrEmpty(password))
            {
                return false;
            }
            using (var Context = new SisContext())
            {
    
                AspNetUser User = Context.AspNetUsers.FirstOrDefault(Usr => Usr.Username == username);
                if (User == null)
                {
                    return false;
                }
                if (!User.IsApproved)
                {
                    return false;
                }
                if (User.IsLockedOut)
                {
                    return false;
                }
                String HashedPassword = User.Password;
                Boolean VerificationSucceeded = (HashedPassword != null && Crypto.VerifyHashedPassword(HashedPassword, password));
                if (VerificationSucceeded)
                {
                    User.PasswordFailuresSinceLastSuccess = 0;
                    User.LastLoginDate = DateTime.UtcNow;
                    User.LastActivityDate = DateTime.UtcNow;
                }
                else
                {
                    int Failures = User.PasswordFailuresSinceLastSuccess;
                    if (Failures < MaxInvalidPasswordAttempts)
                    {
                        User.PasswordFailuresSinceLastSuccess += 1;
                        User.LastPasswordFailureDate = DateTime.UtcNow;
                    }
                    else if (Failures >= MaxInvalidPasswordAttempts)
                    {
                        User.LastPasswordFailureDate = DateTime.UtcNow;
                        User.LastLockoutDate = DateTime.UtcNow;
                        User.IsLockedOut = true;
                    }
                }
                Context.SaveChanges();
                if (VerificationSucceeded)
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
        }
    }
    

    在我的网络配置中,我添加了我的customMembership提供程序,并且还连接到我的SIS数据库。

    当我跑步时,我得到model backing the context has changed错误。 有什么建议可以解决我的问题吗?

1 个答案:

答案 0 :(得分:2)

在base中传递连接字符串。参见下面的

public SisContext():base(connectionstring)//SIS is name of the database
    {
        if (HttpContext.Current == null)
        {
            Database.SetInitializer<SisContext>(null);
        }
    }

右连接字符串应该在web.config中定义。