0

我正在尝试实现一个 ASP.NET MVC 4 应用程序,首先使用 Entityframework 代码。实际上我有 2 个数据上下文,一个自定义的和默认的 UsersContext。

namespace Namespace.Models
{
    public class StoreDB : DbContext
    {
        public DbSet<Supplier> Suppliers { get; set; }
        public DbSet<Vendor> Vendors { get; set; }
        public DbSet<Product> Products { get; set; }
    }
}

public class UsersContext : DbContext
{
    public UsersContext() : base("StoreDB")
    {
    }

    public DbSet<UserProfile> UserProfiles { get; set; }
}

很可能这个说法public UsersContext() : base("StoreDB")是错误的。但是当我离开默认值时,创建: base("DefaultConnection")了一个DefaultConnection数据库,当然,我只想要一个名为“StoreDB”的数据库。

UserProfile我对属于的进行了一些更改UsersContext

[Table("UserProfile")]
public class UserProfile
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int UserId { get; set; }
    public string UserName { get; set; }
    public string Name { get; set; }
    public string Surname { get; set; }
    public DateTime? DoB { get; set; }
}

我更新了 Global.asax 如下:

Database.SetInitializer(new Namespace.Models.StoreDbInitializer());
Database.SetInitializer(new DropCreateDatabaseIfModelChanges<Namespace.Models.UsersContext>());

但是当我运行应用程序时,我得到了这个错误:

CREATE DATABASE permission denied in database 'master'.

为什么要在“master”下创建数据库?

我的连接字符串如下:

<add name="StoreDB" 
     connectionString="Data Source=.\SQLEXPRESS; Initial Catalog=MyDB; Integrated Security=SSPI; MultipleActiveResultSets=True" 
     providerName="System.Data.SqlClient"/>
4

3 回答 3

1

您是否在 IIS 中运行该站点?应用程序池是否在可以在 SQL Express 实例中创建数据库的帐户下运行?如果它以运行方式运行,ApplicationPoolIdentity请尝试将其更改为以运行方式运行NetworkService

另外,尝试删除UsersContext并将属性移动到您的StoreDB上下文中。您应该有一个与连接字符串同名的上下文

于 2013-01-16T21:02:45.787 回答
0

听起来它忽略了这样一个事实,即您有一个名为“StoreDB”的连接字符串,它正在尝试创建一个名为它的数据库(这是您正在调用的同一构造函数的另一个函数)。

您可以明确告诉构造函数这是一个连接字符串的名称,如下所示:

public UsersContext() : base("name=StoreDB")
...

试试看,让我知道它是否有效。

于 2013-01-16T22:29:41.677 回答
0

我认为问题在于我不是以管理员身份运行 Visual Studio .. 我不知道究竟是为什么,但现在似乎没问题。很抱歉打扰您,感谢您的时间和回答!

于 2013-01-17T08:54:42.630 回答