3

2つのテーブルがあり、そのうちの1つのPKを別のテーブルでPKとして使用したいと思います。

これは、データ注釈を使用した私の実装です。

public class User
{
    public System.Guid UserId { get; set; }
    public string UserName { get; set; }
}

public class Student
{
    [Key, ForeignKey("User")]
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public System.Guid StudentId { get; set; }

    public string FirstName { get; set; }

    public string LastName { get; set; }

    // shared primary key 
    public virtual User User { get; set; }
}

ここでStudent、テーブルはUserの主キーを使用しています。

Fluent APIでこれを実装するにはどうすればよいですか?

(2番目の質問として、テーブルから値を削除するStudentと、カスケード削除が発生しますか?)

4

1 に答える 1

5

Fluent APIでこれを実装するにはどうすればよいですか?

modelBuilder.Entity<Student>()
    .HasRequired(s => s.User)
    .WithOptional();

Studentテーブルから値を削除すると、カスケード削除が発生します。

いいえ、Studentは関係の依存関係(外部キーを保持)であり、プリンシパル(であるUser)ではないためです。カスケード削除は、プリンシパルを削除した場合にのみ有効になります。1対1の関係の場合は、手動で有効にする必要があります。

modelBuilder.Entity<Student>()
    .HasRequired(s => s.User)
    .WithOptional()
    .WillCascadeOnDelete(true);

これで、Userが削除されると、関連するStudentもの(存在する場合)も削除されます。

于 2013-01-24T20:00:34.580 に答える