6

Tôi có câu hỏi về việc xác định khóa ngoại trong API mã thông thạo đầu tiên của EF Code. Tôi có một kịch bản như sau:Chỉ định mã khung thực thể khóa ngoại khóa Trước tiên, thông thạo Api

Hai người và xe hạng hai người. Trong kịch bản của tôi, Xe có thể gán cho Người hoặc không (một hoặc không có mối quan hệ). Mã số:

public class Person 
{ 
    public int Id { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
} 

public class Car 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public Person Person { get; set; } 
    public int? PPPPP { get; set; } 
} 

class TestContext : DbContext 
{ 
    public DbSet<Person> Persons { get; set; } 
    public DbSet<Car> Cars { get; set; } 

    public TestContext(string connectionString) : base(connectionString) 
    { 
    } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<Car>() 
        .HasOptional(x => x.Person) 
        .WithMany() 
        .HasForeignKey(x => x.PPPPP) 
        .WillCascadeOnDelete(true); 

     base.OnModelCreating(modelBuilder); 
    } 
} 

Trong mẫu của tôi, tôi muốn đổi tên khóa nước ngoài PersonId thành PPPPP. Trong bản đồ của tôi, tôi nói:

modelBuilder.Entity<Car>() 
      .HasOptional(x => x.Person) 
      .WithMany() 
      .HasForeignKey(x => x.PPPPP) 
      .WillCascadeOnDelete(true); 

Nhưng mối quan hệ của tôi là một trong số không và tôi sợ tôi nhầm lẫn sử dụng phương pháp WithMany, nhưng EF tạo ra cơ sở dữ liệu với các ánh xạ thích hợp, và tất cả mọi thứ hoạt động tốt.

Hãy nói rằng nếu tôi sai trong mã API Fluent hoặc cách tốt nhất để thực hiện như bây giờ là xong.

Cảm ơn bạn đã trợ giúp.

Trả lời

3

Tôi không thấy sự cố với việc sử dụng API thông thạo tại đây. Nếu bạn không muốn thuộc tính điều hướng bộ sưu tập (ví dụ: Cars) trên lớp Person bạn có thể sử dụng đối số ít hơn WithMany phương pháp.

+0

Ok, cảm ơn câu trả lời. – patryko88

+0

Làm cách nào để bạn có mối quan hệ "một đến một hoặc không" và sử dụng phần WithMany() của API Fluent? @ patryko88 bạn đã nhận được mã của bạn để làm việc như bạn muốn? Nếu có, bạn có thể đăng câu trả lời không? Cảm ơn! –

+0

@BrianBehm EF cho phép bạn có các thuộc tính điều hướng trên cả hai mặt của mối quan hệ một-một chỉ khi bạn đã chia sẻ bản đồ PK. Bằng cách bỏ qua thuộc tính bộ sưu tập, mối quan hệ sẽ giống như_ một-một. – Eranga