0

アドレス行が 1 つのメンバーにのみ属することができる 1 対 1 スタイルのアドレスを持つメンバー モデルがあります。メンバーがアドレスを所有し、メンバーを削除するとアドレスがカスケード削除されるように、これを定義する方法を見つけようとしています。

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

    [Required]
    [ForeignKey("Address")]
    public int AddressId { get; set; }
    public virtual Address Address { get; set; }
}

住所もある

public class Address : IEntity
{
    [Key]
    public int Id { get; set; }

    ....
}

カスケード削除するアドレスを取得するために、次のことを試しました

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder
        .Entity<Member>()
        .HasRequired(m => m.Address)
        .WithRequiredDependent()
        .WillCascadeOnDelete(true);
}

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder
        .Entity<Member>()
        .HasRequired(m => m.Address)
        .WithRequiredPrinciple()
        .WillCascadeOnDelete(true);
}

誰かがここで私を正しい軌道に乗せることができますか? 移行は次の行で失敗します。

System.Data.Entity.ModelConfiguration.ModelValidationException: One 
or more validation errors were detected during model generation:

System.Data.Entity.Edm.EdmAssociationEnd: : Multiplicity is not valid 
in Role 'Member_Address_Source' in relationship 'Member_Address'. Because the
Dependent Role properties are not the key properties, the upper bound of the 
multiplicity of the Dependent Role must be '*'.

ドキュメントからこれを見つけました-ナビゲーションプロパティが1つだけの1対1

 modelBuilder.Entity<OfficeAssignment>()
    .HasKey(t => t.InstructorID);

 modelBuilder.Entity<Instructor>()
     .HasRequired(t => t.OfficeAssignment)
     .WithRequiredPrincipal();

うまくいったら機会があればアップします

4

2 に答える 2