2012-10-12 37 views
10

我一直在用SQl Compact 4.0試用一個代碼第一個EF項目。 當我嘗試運行該項目時,出現「數據庫'master'中的CREATE DATABASE權限被拒絕」錯誤。「實體框架連接到SQLEXPRESS而不是SQL Compact

我搜索了一些幫助,並回應了一些博客試圖識別正在使用的連接字符串。令我吃驚的是

context.Database.Connection.ConnectionString "Data Source=.\\SQLEXPRESS;Initial Catalog=Ancestors.Models.AncestorsContext;Integrated Security=True;MultipleActiveResultSets=True;Application Name=EntityFrameworkMUE" string 

即使我的web.config文件包括以下幾個部分...

<connectionStrings> 
    <add name="DefaultConnection" providerName="System.Data.SqlServerCe.4.0" connectionString="Data Source=|DataDirectory|\aspnet-Ancestors-20121012114712.sdf" /> 
</connectionStrings> 

<system.data> 
<DbProviderFactories> 
    <remove invariant="System.Data.SqlServerCe.4.0" /> 
    <add name="Microsoft SQL Server Compact Data Provider 4.0" invariant="System.Data.SqlServerCe.4.0" description=".NET Framework Data Provider for Microsoft SQL Server Compact" type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=4.0.0.1, Culture=neutral, PublicKeyToken=89845dcd8080cc91" /> 
</DbProviderFactories> 
</system.data> 

有任何人任何想法,爲什麼EF上創建一個連接堅持到SQLEXPRESS,而不是SQL緊湊? 在解決方案的任何地方,我都找不到SQLEXPRESS的參考資料。

回答

2

尋找在你的web.config中<entityFramework>部分,它應該有默認的連接工廠有:

<entityFramework> 
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework"> 
     <parameters> 
     <parameter value="Data Source=.\SQLEXPRESS; Integrated Security=True; MultipleActiveResultSets=True"/> 
     </parameters> 
    </defaultConnectionFactory> 
    </entityFramework> 

如果你正在做一個碼的第一個項目,你也可以改變你的默認構造函數使用你的其他的連接字符串:

public YourContext() : base("name=DefaultConnection") 
{ 

} 
+0

的<的EntityFramework>部分是如下... <的EntityFramework>

+0

嘗試增加一個值,您的defaultConnectionFactory與您的連接字符串,或更改您的默認構造函數,使其針對您的其他連接字符串 –

1

本博客文章涉及如何做到這一點?

http://blogs.msdn.com/b/davidobando/archive/2013/03/13/10339621.aspx

+0

感謝您張貼您的答案!請注意,您應該在此處發佈答案的重要部分,在此網站上,或者您的帖子風險被刪除[請參閱常見問題,其中提到的答案几乎不超過鏈接。](http:// stackoverflow。 com/faq#deletion)如果您願意,您可能仍然包含該鏈接,但僅作爲「參考」。答案應該獨立,不需要鏈接。 – Taryn

3

而不是使用以下到您的連接名稱傳遞到的DbContext

public YourContext() : base("DefaultConnection") 
{ 

} 

使用名稱指令

public YourContext() : base("name=DefaultConnection") 
{ 

} 

這會告訴EF使用參數作爲連接。

此外,在web.config的connectionStrings部分的頂部添加「clear」可能會解決繼承問題。

+0

對於EF6,如果您向上下文添加'name',則會出現錯誤'「與未找到該名稱的連接」 – user3402754

相關問題