0

這是代碼遷移產生對我來說:遷移後與數據庫表和鍵名衝突。 Asp.Net MVC 5 EF 6

public override void Up() 
    { 
     CreateTable(
      "dbo.ApplicationUserProjects", 
      c => new 
       { 
        ApplicationUser_Id = c.String(nullable: false, maxLength: 128), 
        Project_ID = c.Int(nullable: false), 
       }) 
      .PrimaryKey(t => new { t.ApplicationUser_Id, t.Project_ID }) 
      .ForeignKey("dbo.AspNetUsers", t => t.ApplicationUser_Id, cascadeDelete: true) 
      .ForeignKey("dbo.ProjectTbl", t => t.Project_ID, cascadeDelete: true) 
      .Index(t => t.ApplicationUser_Id) 
      .Index(t => t.Project_ID); 

    } 

我更改數據庫名稱我喜歡的東西多了,也就鍵名(列名)。將數據庫名稱示例到「ProjectUsers」中,並將鍵轉換爲「ProjectID」和「UserID」。因此,新的代碼如下所示:

CreateTable(
      "dbo.ProjectUsers", 
      c => new 
       { 

        ProjectID = c.Int(nullable: false), 
        UserId = c.String(nullable: false, maxLength: 128), 
       }) 
      .PrimaryKey(t => new { t.ProjectID, t.UserId }) 
      .ForeignKey("dbo.ProjectTbl", t => t.ProjectID, cascadeDelete: true) 
      .ForeignKey("dbo.AspNetUsers", t => t.UserId, cascadeDelete: true) 
      .Index(t => t.ProjectID) 
      .Index(t => t.UserId); 

我通過運行遷移更新,表更新數據庫和一切變得與我給了數據庫和密鑰的名稱創建。但是,當我導航到頁面時,它會顯示: enter image description here 當我撤銷數據庫名稱的更改但保留我自己的密鑰名稱時,會發生同樣的情況。

那麼,爲什麼會發生這種情況,幕後發生了什麼不希望應用程序使用新名稱?

回答

1

隨着你的異常詳細信息顯示:

System.Data.SqlClient.SqlException:無效的對象名稱 'dbo.ApplicationUserProjects'

EF試着翻譯LINQ查詢語句到SQL相當於其使用一個名爲ApplicationUserProjects的對象(假設爲一個表),但由於數據庫沒有被遷移,所以相應的對象不存在於您的數據庫中。

假設代碼優先遷移到位,因爲你已經創建ProjectUsers表,不同的主鍵索引名,創造適宜的映射表內覆蓋OnModelCreating方法:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<ProjectUsers>().ToTable("ProjectUsers"); 
} 

然後,更改與ApplicationUserProjects相關的所有引用ProjectUsers表,包括您的模型(例如,如果您的表格屬性指向ApplicationUserProjects,請更改爲ProjectUsers)。

[Table("ProjectUsers")] 
public class ProjectUsers 
{ 
    // entity members 
} 

請注意,在遷移開始前需要完成上述那些操作,因爲您應該避免修改自動生成的遷移文件。

您的問題聲明還支持主鍵的問題:當我撤消數據庫名稱的改變,而是 保持我自己的名字,因爲他們鍵

同樣的事情發生。

恕我直言,EF模型類與數據庫創建時定義的,用自己的主鍵字段的名稱取代原有的PK場不匹配表到模型的關係了,而返回相同的指定主鍵索引工作例外。

相關的問題:

Entity Framework throws exception - Invalid object name 'dbo.BaseCs'

Entity Framework code first seems confused on my dbo table names after I tweaked the migration file

+0

時生成的表是一個導航臺。我爲每個模型設置了外部屬性,添加一個遷移,進行更改,運行update-migration命令,一切都以我想要的方式創建。但是,那麼錯誤出來了 – Arianit