Entity Frameworkで1:0..1の関係を定義できません。EF 1〜0..1の関係を正しく定義できません
私は "PerfData
"と "AttachmentData
"エンティティを持っています。 Perf
は親エンティティであり、0または1つのAttachment
を持ちます。コードAttachmentData.CustomForeignKeyId
で
はPerfData.Id
にFKをですが、データベース内のFKは別の名前Attachment.PerfId
がPerfData.Id
にFK(これは私がここに記述したわけではない、いくつかの基底クラスと継承によるものである)である必要があります。私はこれだけを持っている場合は
public class AttachmentData {
...
public Guid Id {get;set;}
public Guid CustomForeignKeyId{ get; set; } // this is FK to Perf.Id
public PerfData Perf { get; set; } // navigation property
}
と、対応する設定が
internal class AttachmentDataConfig : BaseConfig<AttachmentData>
{
public AttachmentDataConfig() : base("Attachment")
{
Property(x => x.CustomForeignKeyId)
.HasColumnName("PerfId");
HasRequired(o => o.Perf)
.WithMany()
.HasForeignKey(f => f.CustomForeignKeyId)
.WillCascadeOnDelete(true);
}
}
あり、それが正常に動作します。移行は適切に生成されます。しかし、私はまた、他の側にナビゲーションプロパティを持っている必要があります:
public class PerfData {
public Guid Id {get;set;}
public AttachmentData> Attachment { get; set; } //navigation property
}
私は、このナビゲーションプロパティを追加する場合は、EFがFKをすでにAttachment
テーブル内で定義された通り、不要な新しい列Perf.Attachment_Id
で新しい移行を作成します。
逆ナビゲーションプロパティHasRequired(O => o.Perf) .WithMany(P => p.Attachment)を定義 。 HasForeignKey(f => f.CustomForeignKeyId) .WillCascadeOnDelete(true); – DevilSuichiro