public class ObjectA
{
public Guid Id {get; set;}
public virtual ObjectB Objectb {get; set;}
}
public class ObjectB
{
public Guid Id {get; set;}
public Guid ObjectAId {get; set;}
public virtual ObjectA ObjectA {get; set;}
}
私は関係を正しくする運がありません。
modelBuilder.Entity<ObjectA>()
.HasRequired(p => p.ObjectB)
.WithRequiredPrincipal()
.WillCascadeOnDelete(false);
2 つの関係が作成されます。
- Object.ObjectA/ObjectA.Id
- ObjectA.Id/ObjectB.Id
EF に関係 #2 の作成を停止させるにはどうすればよいですか? それは正しくなく、私が望むものでもありません。
違う:
modelBuilder.Entity<ObjectA>().HasRequired(x => x.Objectb).WithRequiredPrincipal(x => x.ObjectA);
ALTER TABLE [dbo].[ObjectBs] WITH CHECK ADD CONSTRAINT [FK_ObjectBs_ObjectAs_Id] FOREIGN KEY([Id])
REFERENCES [dbo].[ObjectAs] ([Id])
GO
ほぼ正しい:
modelBuilder.Entity<ObjectA>().HasOptional(x => x.Objectb).WithOptionalPrincipal(x => x.ObjectA);
ALTER TABLE [dbo].[ObjectBs] WITH CHECK ADD CONSTRAINT [FK_ObjectBs_ObjectAs_ObjectA_Id] FOREIGN KEY([ObjectA_Id])
REFERENCES [dbo].[ObjectAs] ([Id])
GO
追加の列が追加されるため、最終的に ObjectB に ObjectAId と ObjectA_Id が含まれます。
modelBuilder.Entity<ObjectA>().HasOptional(x => x.Objectb).WithOptionalPrincipal(x => x.ObjectA).Map(x => x.MapKey("ObjectAId"));
例外をスローします: タイプ内の各プロパティ名は一意である必要があります。プロパティ名 'ObjectAId' は既に定義されています。