2013-01-16 106 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