2013-01-16 238 views
0

我想实现一个ASP.NET MVC应用程序4,首先使用的EntityFramework代码。其实我有2个数据上下文,一个自定义和默认的UsersContext。的EntityFramework代码优先迁移

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 UsersContext() : base("StoreDB")是错误的。但是,当我离开默认值: base("DefaultConnection")时,创建了一个DefaultConnection数据库,当然,我只想要一个名为“StoreDB”的数据库。

我做了一些改变,以属于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; } 
} 

UserProfile我更新在Global.asax如下:

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

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

CREATE DATABASE permission denied in database 'master'. 

为什么它试图创建数据库“大师”?

我的连接字符串如下:

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

如果我没有记错的话,也有加入数据库SQL Server实例时,写入表中的主数据库的条目。话虽如此,如果你尝试创建一个数据库,你需要拥有主数据库的权限。 [微软的主DB页(http://msdn.microsoft.com/en-us/library/ms187837.aspx) –

+0

嗨,但我的目标是不使用主数据DB ..我想用我自己的。我“M已经怕我会与EF问题时,我会转移到生产..如果我没有对数据库的控制,我想我会改变一切:( – Davide

+0

主数据库中保存的所有数据库的列表所以当你连接到你的数据库'StoreDB'时,SQL Server将在主数据库中查找该数据库的条目以及其他权限(根据我的理解,它不再保存在主数据库中) 。基本上,你不能没有主数据库的SQL Server。 –

回答

0

我觉得现在的问题是,我是在运行Visual Studio不是管理员。我不知道到底为什么,但现在似乎确定。 抱歉打扰你,谢谢你的时间和你的答案!

1

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

此外,尝试取出UsersContext和财产移动到您StoreDB上下文。您应该有一个与连接字符串名称相同的上下文

+0

嗨,我实际上使用卡西尼。我需要改变一些东西吗? – Davide

+0

为什么你有2个上下文?你有2个数据库吗? – levelnis

+0

不,只有一个数据库。一个上下文已经由MVC(用户)自动创建,另一个上下文是由我在教程后创建的。我承认我是在MVC 4和EF中工作,所以可能我的架构是错误的 – Davide

0

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

你可以明确地告诉构造函数,这是像这样的连接字符串的名称:

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

试一下,让我知道,如果它的工作原理。

+0

嗨,我试过这个没有运气:(..任何其他的想法? – Davide