2017-08-12 35 views
0

我有兩個相關的表格,以及帶有視圖的自動生成控制器。 當我TRU打開的所有記錄索引列表我得到這個錯誤:什麼是錯的,System.Data.SqlClient.SqlException:無效的列名稱'tbl_rules_rulID'。?

說明:在當前Web請求的執行過程中發生未處理的異常。請查看堆棧跟蹤以獲取有關該錯誤的更多信息以及源代碼的位置。

異常詳細信息: System.Data.SqlClient.SqlException:無效的列名稱'tbl_rules_rulID'。

這裏模型tbl_rules

public class tbl_rules 
    { 
    public tbl_rules() 
     { 
      tbl_users = new HashSet<tbl_users>(); 
     } 

     [Key] 
     [DisplayName("ID")] 
     public int rulID { get; set; } 
     [Required(ErrorMessage = "Изберете Овластување")] 
     [DisplayName("Овластување")] 
     public string Rule_Name { get; set; } 
     public virtual ICollection<tbl_users> tbl_users { get; set; } 
    } 

這裏是模型tbl_users:

public class tbl_users 
{ 
    [Key] 
    [DisplayName("ID")] 
    public int uID { get; set; } 
    [Required(ErrorMessage = "Ве молиме внесете име на Агентот")] 
    [StringLength(50)] 
    [DisplayName("Агент")] 
    [MaxLength(20, ErrorMessage = "Максимален број на карактери за {0} 20")] 
    public string user_ime { get; set; } 
    [Required(ErrorMessage = "Ве молиме внесете Username")] 
    [StringLength(50)] 
    [DisplayName("Username")] 
    public string username { get; set; } 
    [Required(ErrorMessage = "Ве молиме внесете Password")] 
    [StringLength(50)] 
    [DataType(DataType.Password)] 
    [DisplayName("Password")] 
    public string Password { get; set; } 
    [Required(ErrorMessage = "Ве молиме внесете телефонски број")] 
    [StringLength(50)] 
    [DisplayName("Телефон")] 
    public string tel { get; set; } 
    [Required(ErrorMessage = "Ве молиме внесете Белешка.")] 
    [StringLength(50)] 
    [DisplayName("Белешка")] 
    public string note { get; set; } 
    [DisplayName("Активен?")] 
    public bool active { get; set; } 
    [DisplayName("Статус")] 
    public bool IsOnline { get; set; } 
    [DisplayName("Овластување")] 
    [Required(ErrorMessage = "Изберете Овластување")] 
    public int rullID { get; set; } 
    private DateTime? modified1; 
    public DateTime modified 
    { 
     get { return modified1 ?? DateTime.Now; } 
     set { modified1 = value; } 
    } 
    public virtual tbl_rules tbl_rules { get; set; } 
} 

位指示代碼:

public ActionResult Index() 
     { 
      return View(db.tbl_users.ToList()); 
     } 

tbl_rules SQL:

CREATE TABLE [dbo].[tbl_rules] (
    [rulID]  INT   IDENTITY (1, 1) NOT NULL, 
    [Rule_Name] NVARCHAR (MAX) NOT NULL, 
    PRIMARY KEY CLUSTERED ([rulID] ASC) 
); 

tbl_users SQL:

CREATE TABLE [dbo].[tbl_users] (
    [uID]  INT   IDENTITY (1, 1) NOT NULL, 
    [user_ime] NVARCHAR (50) NOT NULL, 
    [username] NVARCHAR (50) NOT NULL, 
    [Password] NVARCHAR (50) NOT NULL, 
    [tel]  NVARCHAR (50) NOT NULL, 
    [note]  NVARCHAR (50) NOT NULL, 
    [active] BIT   NOT NULL, 
    [rullID] INT   NOT NULL, 
    [modified] DATETIME  DEFAULT (getdate()) NOT NULL, 
    [IsOnline] BIT   NOT NULL, 
    PRIMARY KEY CLUSTERED ([uID] ASC), 
    CONSTRAINT [UserName] UNIQUE NONCLUSTERED ([username] ASC), 
    CONSTRAINT [ZaRules] FOREIGN KEY ([rullID]) REFERENCES [dbo].[tbl_rules] ([rulID]) 
); 

這裏有什麼問題?

+0

請勿張貼代碼的截圖。發佈SQL表的代碼定義。更重要的是:發佈完整的異常消息和堆棧跟蹤! – Dai

+0

謝謝,更新 –

+1

tbl_users中的導航屬性不遵循約定,規則id字段在表之間以不同方式命名。您必須手動映射它或更改數據庫以遵循EF約定。 – Crowcoder

回答

0

EF無法正確映射關係。 可以在用戶類重命名FK的

public int rullID { get; set; } 

public int rulID { get; set; } 

這一翻譯也可以添加註釋:

[ForeignKey("rullID ")] 
    public virtual tbl_rules tbl_rules { get; set; } 

兩種方式應該可以解決你broblem。

+0

謝謝,第二種解決方案對我來說更好,它的工作。謝謝 –

0

我猜這兩個應該是一樣的嗎?
從規則:

public int rulID { get; set; } 

從用戶:

public int rullID { get; set; } 

所以確實,你rules表沒有列rullID,因爲您的錯誤信息明確地告訴你。

通過簡單地調用列RuleId避免這些難以看到的錯字。保存一個角色不值得麻煩。

只是要說清楚:您顯示的錯誤信息可能來自您尚未發佈的代碼。某處指的是tbl_rules_rulID,並且該列確實不存在。所以要麼修復引用或創建該列。

+0

在tbl_rules中,主鍵名是rulID,但在tbl_users列名中是rullID,我認爲它沒問題,因爲FK也是在數據庫關係中創建的屬性。 –

+0

如果出現錯誤,則不好。只要把事情整理妥當。這是一個很好的習慣,它可能有助於避免人們維護你的代碼,試圖傷害你;)你的錯誤信息清楚地表明你指的是某個地方:rullID,一個明顯不存在的列。 – oerkelens

相關問題