2016-05-05 7 views
2

これは、2つのテーブルを結合するために.includeを使ってEFを使用する最初の試みです。私がそれを実行すると、 "CallStatus_Id"が無効な列であるというエラーが表示されます。それは正しいです、私はテーブルのフィールドがありませんが、私はEFがSQLクエリでそれを使用している理由はわかりません。Entity Framework。不正なJOINを作成しますか?

私が行ったことは、CustomerCall.StatusをCallStatus.Idに一緒に設定するCustomerCallテーブルで外部キーを作成することでした。私は、CustomerCall.StatusフィールドにPK値を格納し、CallStutus.Idにそれをジョインして、表示目的でCallStatus.StatusNameを取得できるようにしています。ここで

は、私のラムダ式である:

var call = db.CustomerCalls.Include(s => s.CallStatus).Where(c => c.Id == id).FirstOrDefault(); 

ラムダの私の理解では、それが作成されたFKを使用してCallStatusテーブルに参加さ、CustomerCallsテーブルを呼び出し、WHERE文が引っ張るということだろうIDは、リポジトリメソッドに渡されたIDに基づいてCustomerCallのIDです。

次のSQLを作成します。 JOINで[Extent1]。[CallStatus_Id]が正しく作成されていないことがわかります。 。私はそれが[Extent1]である必要があり、[状態]をその列を持っていないと私はそれを

を修正するために、どのようにこれらは私のEFエンティティクラスですません。

namespace CPPCustomerCall.Models 
{ 
    using System; 
    using System.ComponentModel.DataAnnotations; 
    using System.ComponentModel.DataAnnotations.Schema; 

    [Table("CustomerCall")] 
    public partial class CustomerCall 
    { 
     public int Id { get; set; } 

     [StringLength(50)] 
     public string CustomerName { get; set; } 

     [StringLength(50)] 
     public string Subject { get; set; } 

     [Column(TypeName = "text")] 
     public string Comment { get; set; } 

     public DateTime? CallDate { get; set; } 

     public int? Status { get; set; } 

     public int? AssignedTo { get; set; } 

     public DateTime? CreateDate { get; set; } 


     public CallStatus CallStatus { get; set; } 

    } 
} 

namespace CPPCustomerCall.Models 
{ 
    using System.ComponentModel.DataAnnotations; 

    public partial class CallStatus 
    { 
     public int Id { get; set; } 

     [StringLength(25)] 
     public string StatusName { get; set; } 
    } 
} 
+0

外部キーを手動で作成するか、最初にEFコードを使用して作成しましたか? – MaKCbIMKo

+0

私はSQL Serverでそれをやった。私はEFでそれに行くと思いますか? – Caverman

+0

デフォルトでは、EFはあなたがすでにFKを作成したことを知らないので、コード内に何らかの形でそれを指定する必要があります。 – MaKCbIMKo

答えて

0

ここに掲載の提案でCustomerCallエンティティの[CallStatus]ナビゲーションプロパティに[ForeignKey( "Status")]アノテーションを追加することで、動作するように見えます。 CallStatusエンティティのIdフィールドに[Key]を設定する必要もありました。

public partial class CustomerCall 
    { 
     public int Id { get; set; } 

     [StringLength(50)] 
     public string CustomerName { get; set; } 

     [StringLength(50)] 
     public string Subject { get; set; } 

     [Column(TypeName = "text")] 
     public string Comment { get; set; } 

     public DateTime? CallDate { get; set; } 

     public int? Status { get; set; } 

     public int? AssignedTo { get; set; } 

     public DateTime? CreateDate { get; set; } 

     [ForeignKey("Status")] 
     public CallStatus CallStatus { get; set; } 

    } 

public partial class CallStatus 
    { 
     [Key] 
     public int Id { get; set; } 

     [StringLength(25)] 
     public string StatusName { get; set; } 
    } 
関連する問題