Điều này có liên quan đến câu trả lời của @Ladislav Mrnka về việc sử dụng api trôi chảy để cấu hình mối quan hệ một-một.
Có một tình huống mà FK of dependent must be it's PK
không có khả thi.
Ví dụ, Foo
đã có mối quan hệ một-nhiều với Bar
.
public class Foo {
public Guid FooId;
public virtual ICollection<> Bars;
}
public class Bar {
//PK
public Guid BarId;
//FK to Foo
public Guid FooId;
public virtual Foo Foo;
}
Bây giờ, chúng tôi đã phải thêm một mối quan hệ một-một giữa Foo và Bar.
public class Foo {
public Guid FooId;
public Guid PrimaryBarId;// needs to be removed(from entity),as we specify it in fluent api
public virtual Bar PrimaryBar;
public virtual ICollection<> Bars;
}
public class Bar {
public Guid BarId;
public Guid FooId;
public virtual Foo PrimaryBarOfFoo;
public virtual Foo Foo;
}
Dưới đây là cách chỉ định mối quan hệ một-một bằng cách sử dụng api trôi chảy:
modelBuilder.Entity<Bar>()
.HasOptional(p => p.PrimaryBarOfFoo)
.WithOptionalPrincipal(o => o.PrimaryBar)
.Map(x => x.MapKey("PrimaryBarId"));
Lưu ý rằng trong khi thêm PrimaryBarId
cần phải được loại bỏ, vì chúng tôi chỉ định nó thông qua api trôi chảy.
Cũng lưu ý rằng tên phương thức [WithOptionalPrincipal()][1]
là loại mỉa mai. Trong trường hợp này, Hiệu trưởng là Bar. Mô tả WithOptionalDeperee () trên msdn làm cho nó rõ ràng hơn.