2011-03-27 19 views
22

Entity Framework 4.1 üzerinde çalışıyorum ve yabancı anahtarlar için veri ek açıklamaları kullanıyorum. Ürün ve kategoriler arasında bire bir ilişkiyi nasıl tanımlayabiliriz bilmek istiyorum. Kategoriyi haritalamak istiyorum. product.cidVarlık çerçevesinde yabancı anahtarlar 4.1

public class Category 
{ 
    public string CategoryId { get; set; } 
    public string Name { get; set; } 

    public virtual ICollection<Product> Products { get; set; } 
} 

public class Product 
{ 
    public int ProductId { get; set; } 
    public string Name { get; set; } 
    public string CId { get; set; } 

    public virtual Category Category { get; set; } 
} 

ile KategoriNo

cevap

24

Hem bu yaklaşımlar çalışması gerekir:

DÜZENLEME ben şöyle doğru yaklaşım olduğuna inanıyorum bu kullanarak veri açıklamaları yapmak için

public class Product 
{ 
    public int ProductId { get; set; } 
    public string Name { get; set; } 
    public string CId { get; set; } 

    [ForeignKey("CId")] 
    public virtual Category Category { get; set; } 
} 

ForeignKeyAttribute, navigasyon ayarlarını eşleştirmek için kullanılır operty ve yabancı anahtar özelliği. İlgili navigasyon mülkünün adını veya ilgili yabancı anahtar mülkünün adını içerir.

+0

@Ladislave Ürünün içinde [ForeignKey ("CategoryId")] olmayacak mı? – DotnetSparrow

+0

@Anyone Birisi bu iki yaklaşım arasında herhangi bir farklılık olup olmadığını bana açıklayabilir mi? Aynı görünüyorlar ama geliştiricinin diğeri üzerinde bir yöntem seçmesine neden olabilecek herhangi bir şey var mı? – Ray

6

Bunun için entityconfigurations kullanmak önerin. entityconfiguration olarak

, kategori entityconfiguration bu eşleme ekleyin:

HasMany<Product>(x => x.Products).WithRequired().HasForeignKey(x => x.CId); 

Yalnızca sınıfların birinde eşlemek gerekiyor ve DBContext kullanmak için yeterince zeki.

Daha fazla bilgi için bu blog post adresine bakın.

public class Product 
{ 
    public int ProductId { get; set; } 
    public string Name { get; set; } 
    [ForeignKey("Category")] 
    public string CId { get; set; } 

    public virtual Category Category { get; set; } 
} 

Veya:

[RelatedTo(RelatedProperty="Products", Key="CId", RelatedKey="CategoryId")] 
public virtual Category Category { get; set; } 
+0

@Gates: Veri ek açıklamalarını kullanarak yapmak istiyorum – DotnetSparrow

+0

@Gates Bunu, akıcı API – DotnetSparrow

+0

yerine veri ek bilgilerini kullanarak nasıl yapabilirim? 1 sürümden beri CTP4'ten beri bunun için ek açıklamalar kullanmıyordum, ancak doğru olduğuna eminim. – Gats

İlgili konular