2017-08-12 19 views
0

私は2つの関連テーブルを持っていて、ビューを持つ自動生成コントローラです。私は、インデックス、すべてのレコードのリストを開くには、TRUとき 私はこのエラーを取得:未処理の例外は、現在のWeb要求の実行中に発生した:何が悪いですか、System.Data.SqlClient.SqlException:無効な列名 'tbl_rules_rulID'。

説明。エラーの詳細とコード内のどこで発生したのかについては、スタックトレースを参照してください。

例外の詳細: System.Data.SqlClient.SqlException:無効な列名 'tbl_rules_rulID'です。ここで

モデルは、モデルtbl_usersです。ここ

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_rules:

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; } 
} 

Contollerコード:

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は正しく関係をマップできません。

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

両方の方法は、あなたがbroblem修正する必要があります。 あなたはユーザークラスに

public int rullID { get; set; } 

それとも、注釈を追加できるのintead

public int rulID { get; set; } 

をあなたのFKの名前を変更することができます。

+0

ありがとう、2番目の解決策は私のために良いです、それは仕事です。ありがとうございました –

0

私はこれらの2つが同じであると推測していますか?ルールから
:ユーザーからの

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

エラーが発生してもOKではありません。物事を正しく整理してください。それはよい習慣であり、あなたのコードを維持している人があなたを害するのを避けるのに役立つかもしれません;)エラーメッセージは明らかに、ルールを参照しているどこかに、明らかに存在しない列rullIDを示します。 – oerkelens

関連する問題