2011-09-15 5 views
11

arasındaki fark ben Çalışan arasındaki ilişkiyi ayarlarsanız aşağıdaki varlıklarıHasRequired ve HasOptional

public class SchoolContext : DbContext 
    { 
     public DbSet<Address> Addresses { get; set; } 
     public DbSet<Employee> Employees { get; set; }  
    } 

    public class Address 
    { 
     public int Id { get; set; } 
     public string Street { get; set; } 

     public virtual Employee Employee { get; set; } 
    } 

    public class Employee 
    { 
     public int Id { get; set; } 
     public string Name { get; set; } 

     public virtual Address Address { get; set; } 
    } 

varsa ve tablo yapısı tam olarak aynı oluşturursanız, iki seçenekten Üstü Akıcı API

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
     { 
      // Option #1 
      modelBuilder.Entity<Employee>() 
         .HasRequired(s => s.Address) 
         .WithRequiredPrincipal(a => a.Employee); 

      // Option #2 
      modelBuilder.Entity<Employee>() 
         .HasOptional(s => s.Address) 
         .WithRequired(a => a.Employee); 

     } 

aşağıdaki Adresi nedir Yani, iki seçenek arasındaki fark nedir. Seçenek 1 ile gidersem, Çalışan varlığının her zaman adres varlığına sahip olması gerektiğini düşündüm, ama değildi. Çalışan değeri, adres değeri olmayan bir şekilde kurtarabilirdim.

Şimdiden teşekkürler.

+0

'HasRequired' sadece Adres gelen Çalışan için çalışır mı? Dolayısıyla, 'HasRequired' seçeneğini belirlerseniz, bağlantılı bir çalışan olmadan bir adresi kaydedemezsiniz. Ancak, çalışan tablosunun adres tablosuna başvuran yabancı bir anahtarı bulunmadığından, bir çalışanın adresi olup olmadığına bakılmaksızın her zaman kaydedebilirsiniz. – ipr101

+0

İki varlık arasında bire bir ilişki kurmak istedim. Bahsettiğiniz gibi, bağlantılı çalışan olmadan adres kaydedemiyorum. Bu iki seçenekte oldu. Eğer öyleyse, yukarıdaki iki seçenek farklı değil mi? Sorguladığım gibi, ilk adreste bağlantı adresi olmayan çalışanın kurtarılmasının mümkün olmadığına inandım, fakat yanılmışım. – Ray

cevap

8

Sadece HasRequired ve HasOptional öğelerinin anlamlarına dayanarak, İsteğe Bağlı # 1'in Adresi zorlamasını ve bir Adres belirtmeden bir Çalışan oluşturmanıza izin vermeyeceğini ve bu Seçenek # 2'nin bir Çalışanla birlikte oluşturmanıza izin vereceğini umuyorum. isteğe bağlı bir adres.


bu varlık türünden gerekli bir ilişki yapılandırır HasRequired. Bu ilişki belirtildiğinde, varlık türü, veri türü veritabanına kaydedilemez. Veritabanındaki yabancı anahtar null olamaz.

HasOptional
bu varlık türünden opsiyonel ilişkiyi yapılandırır. Varlık türünün örnekleri, bu ilişki belirtilmeden veritabanına kaydedilebilecektir. Veritabanındaki numaralı yabancı anahtar null.

http://msdn.microsoft.com/en-us/library/gg671317%28v=vs.103%29.aspx
http://msdn.microsoft.com/en-us/library/gg671230%28v=vs.103%29.aspx