2017-07-24 67 views
0

我所做的更改到工作Azure的Web應用程序(這裏的一切是在一個項目中),因此,我在我的解決方案的結構如下:獲取現有的數據庫項目從WebJob導致「具有相同名稱的數據庫中存在」

Project.Data

  • 模型
  • DataContext的使用上下文
  • 數據層代碼,CRUD操作

Project.WebApp

  • 控制器和視圖
  • 使數據層調用

Project.WebJob

  • 使數據層

調用我之前添加Project.WebJob我分開了數據連續分機到Project.Data,我確保所有的東西都能夠正常工作,而且確實如此。通過Project.WebApp中的控制器通過數據層進行數據庫調用是沒有問題的。我正在使用LocalDB運行本地的所有內容。

在Project.WebJob我嘗試做通過在Project.Data數據層一個簡單的數據庫查詢,但我得到這個錯誤:

{"An attempt to attach an auto-named database for file E:\Dev\xxx\WebApp\Project.WebJob\bin\Debug\Dashboard.mdf failed. A database with the same name exists, or specified file cannot be opened, or it is located on UNC share."}

Dashboard.mdf不會在錯誤消息中指定的路徑上存在。當然,數據庫存在於我的本地數據庫服務器上。 網絡作業應從現有的數據庫中獲取,而不是創建一個新的

在Project.WebJob的app.config中,我定義的連接字符串

<add name="dbserver" connectionString="Data Source=(LocalDb)\MSSQLLocalDB;AttachDBFilename=|DataDirectory|\Dashboard.mdf;Integrated Security=SSPI;" providerName="System.Data.SqlClient" /> 

這是相同Project.WebApp的web.config。

<add name="dbserver" connectionString="Data Source=(LocalDb)\MSSQLLocalDB;AttachDBFilename=|DataDirectory|\Dashboard.mdf;Integrated Security=SSPI;" providerName="System.Data.SqlClient" /> 

這裏是我的DataContext類,我設置上下文類,並在關鍵的名稱傳遞連接字符串:

public class DataContext : DbContext 
    { 
     public DbSet<Tenant> Tenants { get; set; } 
     public DbSet<Region> Regions { get; set; } 
     public DbSet<Instance> Instances { get; set; } 
     public DbSet<Plan> Plans { get; set; } 
     public DbSet<Industry> Industries { get; set; } 

     public DataContext() : base("dbserver") 
     { 
      Database.SetInitializer<DataContext>(null); 
     } 

     protected override void OnModelCreating(DbModelBuilder modelBuilder) 
     { 
     } 
    } 
+1

由於錯誤告訴你,WebJob定義了自己的DataDirectory。嘗試使用絕對路徑,也可能是另一種驅動程序模式(不是AttachFile)。 –

+0

所以你說每個使用數據層的項目都會相對於項目文件夾創建自己的數據庫? @HenkHolterman – smarty

回答

1

我解決它通過改變連接字符串

<add name="dbserver" 
    connectionString="Data Source=(LocalDb)\MSSQLLocalDB;Integrated Security=SSPI;Initial Catalog=dashboard;" 
    providerName="System.Data.SqlClient" /> 

這使得連接到SQL服務器和所有項目的同一個數據庫。

相關問題