6

EF Code First Fluent API'de Yabancı Anahtarın tanımlanması ile ilgili bir sorum var. Böyle bir senaryo var:Yabancı Anahtarlı Varlık Çerçeve Kodunun Belirtilmesi Önce Fluent Api

İki sınıf Kişi ve Araba. Benim senaryoda Araba Kişiyi atayabilir veya atayamaz (bir veya sıfır ilişki). Kodu: Benim örnekte

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); 
    } 
} 

Ben ppppp yabancı anahtar PersonId adlandırmak istiyorum.

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

Ama ilişki sıfıra biridir ve ben WithMany yöntemi kullanarak hata yok korkuyorum ama EF uygun eşleştirmeleri ile veritabanını oluşturmak ve her şey iyi çalışıyor: my eşlemenizde diyorum.

Lütfen Fluent API kodumda yanlış mıyım, yoksa şu anda yapmayı sevmenin iyi bir yolu var mı?

Yardımlarınız için teşekkürler.

cevap

3

Burada akıcı API kullanımıyla ilgili bir sorun görmüyorum. Toplama gezinme özelliği (Cars) Person sınıfında istemiyorsanız, bağımsız değişken daha az WithMany yöntemini kullanabilirsiniz.

+0

Tamam, cevap için teşekkürler. – patryko88

+0

Bir "bir (sıfır)" ilişkisine nasıl sahip olabilirsiniz ve Fluent API'sinin WithMany() bölümünü kullanabilirsiniz? @ patryko88 kodunu istediğin gibi çalıştırdın mı? Eğer öyleyse, cevabı yazabilir misiniz? Teşekkürler! –

+0

@BrianBehm EF, yalnızca bir PK eşlemesi paylaştıysanız, birebir ilişkinin her iki tarafındaki gezinme özelliklerine sahip olmanızı sağlar. Koleksiyon özelliğini ihmal ederek ilişki, bire bir gibi. – Eranga