0

我使用ASP.NET Core MVC6和Entity Framework Core構建應用程序首先在DB上下文中編譯代碼,SQL數據庫已經填充了數據記錄。我最近對數據模型做了一些小改動並重新創建了遷移,在VS 2015包管理器控制檯中命令爲(「dotnet ef migrations add stage3」,「dotnet ef database update」),但出現如下錯誤:實體框架核心錯誤:dotnet.exe:System.Data.SqlClient.SqlException(0x80131904):數據庫中已經有一個名爲'Company'的對象

dotnet.exe : System.Data.SqlClient.SqlException (0x80131904): There is already an object named 'Company' in the database. 

公司表位於表格關係的頂部,似乎是因爲表格公司已經存在並且EF無法更新新的表格結構。如果我在連接字符串中更改數據庫名稱,它將創建具有新表結構的新數據庫,而不會有任何問題。我不知道如何解決這個問題?在不久的將來應用程序上線後,我會對模式做出更多更改,並且會再次出現同樣的問題,並且我無法使用實時數據刪除數據庫以重新創建新的表結構,也許我應該在Startup.cs文件中配置它,但我還沒有找到任何有用的資源。請給我一些建議。

我試圖將DB初始化程序更改爲附加的屏幕截圖,但不知道如何去做。 enter image description here

我再次檢查項目代碼,遷移沒有被應用到__MigrationHistory表,遷移代碼實際上包含的代碼來創建整個數據庫的結構示例如下:

migrationBuilder.CreateTable(
      name: "Company", 
      columns: table => new 
      { 
       CompanyId = table.Column<int>(nullable: false) 
        .Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn), 
       CompanyName = table.Column<string>(maxLength: 100, nullable: false), 
       IsAdmin = table.Column<bool>(nullable: false) 
      }, 
      constraints: table => 
      { 
       table.PrimaryKey("PK_Company", x => x.CompanyId); 
      }); 

我的天堂」 t改變了項目命名空間。最近,我只對幾個表格關係做了一些修改,例如網站用戶權限表(公司有很多網站)。我添加了權限表,所以現在網站用戶權限表可以具有多個權限類型而不是單個權限類型。

不確定如何在實體框架核心中設置自動遷移。

+0

你可以發佈對公司所做的更改嗎? – Yaser

+0

我還沒有對公司表做過更改,最近我只對網站用戶權限表(公司有很多網站)等少數表關係做過一些修改。我添加了權限表,所以現在網站用戶權限表可以具有多個權限類型而不是單個權限類型。 – bearview

回答

0

在實體框架代碼首先計算策略,有四個不同的數據庫初始化策略:

  • CreateDatabaseIfNotExists:這是默認初始值。如名稱 建議的那樣,如果根據 配置不存在,它將創建數據庫。但是,如果更改模型類,然後使用此初始化程序運行 應用程序,那麼它將拋出 異常。

  • DropCreateDatabaseIfModelChanges:這初始化刪除現有的數據庫,並創建一個新的數據庫,如果你的模型類 (實體類)已被更改。因此,當模型類更改時,您不必擔心維護數據庫模式的 。

  • DropCreateDatabaseAlways:顧名思義,這個初始化刪除現有的數據庫每次運行應用程序時, 不論你的模型類是否已經改變與否。這個 將會很有用,當你想要新的數據庫時,每次運行 應用程序時,就像在開發應用程序時一樣。

  • 自定義數據庫初始化器:您還可以創建自己的自定義初始化,如果上述任何不符合您的要求或 你想要做一些其他的過程,初始化使用 上述初始化數據庫。

所以,如果你正在使用DropCreateDatabaseIfModelChanges或DropCreateDatabaseAlways然後用CreateDatabaseIfNotExists替換它。

請試試看。

+0

嗨,感謝您的回覆,但我已經在ApplicationDbContext.cs文件中使用了默認初始化程序,我假設它是CreateDatabaseIfNotExists,請告知。 – bearview

+0

好吧請你可以試試這個鏈接http://stackoverflow.com/questions/24169140/there-is-already-an-object-named-aspnetroles-in-the-database –

+0

感謝您的回覆,這個例子是舊的版本的Entity框架,我使用的是EF內核,因此-IgnoreChanges命令參數在EF內核中不可用,不確定如何在Entity框架內核中設置自動遷移? – bearview

相關問題