1

モデルクラスには、出席と従業員の2つがあります。Employeeクラスを次のように定義しました。

public class Employee
{
    public int Id { get; set; }
    public string Username { get; set; }
    public string Password { get; set; }
}

次に、出席クラスを次のように定義しました。

public class Attendance
{
    public int Id { get; set; }
    public Employee Employee { get; set; } //This is the foreign key
    public DateTime LoginDate { get; set; }
    public DateTime LogoutDate { get; set; }
}

Employeeテーブルにデータを挿入しようとすると正常に機能しますが、Attendanceテーブル内にデータを挿入しようとすると例外が表示されます。従業員を適切にチェックし、出席テーブル内に1行の従業員のみを挿入しています。

例外の画像は次のとおりです。

ここに画像の説明を入力してください

4

4 に答える 4

2

表示されたエラーを解決するために(そして根本的な問題の詳細を取得するために)、次のようにEmployeeIdのフィールドをAttendanceクラスに追加します。

public class Attendance
{
    public int Id { get; set; }
    //This exposes the foreign key on attendance
    public int EmployeeId {get; set;}
    public Employee Employee { get; set; } //This is the foreign key
    public DateTime LoginDate { get; set; }
    public DateTime LogoutDate { get; set; }
}

本当の問題(私は信じています)は、EFが関係の所有者を決定できないことです。詳細情報がなければ、出席と従業員の関係が多対1なのか1対1なのかを判断することはできません。簡単な解決策(多対1の関係だと思います)は、次のようにAttendanceオブジェクトのコレクションをEmployeeクラスに追加することです。

public class Employee
{
    public int Id { get; set; }
    public string Username { get; set; }
    public string Password { get; set; }
    public virtual ICollection<Attendance> Attendances {get; protected set;}
}
于 2012-12-04T15:03:25.223 に答える
2

外部キープロパティを定義する必要があります。

public class Attendance
{
    public int Id { get; set; }
    public int EmployeeID { get; set; }
    public Employee Employee { get; set; }
    public DateTime LoginDate { get; set; }
    public DateTime LogoutDate { get; set; }
}

public class Employee
{
    public int Id { get; set; }
    public string Username { get; set; }
    public string Password { get; set; }
}

外部キーをintとして追加した後、次のように構成できます。

public class AttendanceConfiguration : System.Data.Entity.ModelConfiguration.EntityTypeConfiguration<Attendance>
{
    public AttendanceConfiguration()
    {
        this.HasRequired(a => a.Employee)
            .WithMany()
            .HasForeignKey(a => a.EmployeeID);
    }
}

そして、コンテキストでこの構成を定義します

public class Context : DbContext
{
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Configurations.Add(new AttendanceConfiguration());
    }
}

更新
パラメーターを持たないWithMany()オーバーロードを使用することにより、単一の単方向の1対多の関係を作成できます。

于 2012-12-04T15:09:18.583 に答える
0

エンティティだけでなく、キー自体を公開する必要があります。

public class Attendance
{
    public int Id { get; set; }
    public Employee Employee { get; set; }
    public int EmployeeId { get; set; } // THIS is the foreign key.
    public DateTime LoginDate { get; set; }
    public DateTime LogoutDate { get; set; }
}
于 2012-12-04T15:01:56.457 に答える
0

従業員エンティティにキー属性を配置してみてください。

于 2012-12-04T15:03:06.650 に答える