これは、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; }
}
}
外部キーを手動で作成するか、最初にEFコードを使用して作成しましたか? – MaKCbIMKo
私はSQL Serverでそれをやった。私はEFでそれに行くと思いますか? – Caverman
デフォルトでは、EFはあなたがすでにFKを作成したことを知らないので、コード内に何らかの形でそれを指定する必要があります。 – MaKCbIMKo