2012-02-18 18 views
5

Müşteri bilgilerini görüntülemek istiyorum. Sonra bazı sınıflar oluşturdum; Müşteri, Teslimat, Sipariş, Sipariş Hattı, Ürün ve kiralamaDB. kiralamaDB class setleri 5 DbSet Ürün, Müşteri, Sipariş, Sipariş Hattı ve Teslimat. Listenin görüntüsü UserController yaptığınızda , ben müşteri bilgilerini gösteremez ve bu hataları alır: bu varlıkların anahtarı gerektiren nedenASP.NET MVC 3 EntityType tanımlanmış hiçbir anahtar yok

One or more validation errors were detected during model generation: 
System.Data.Edm.EdmEntityType: : EntityType 'OrderLine' has no key defined. Define the key for this EntityType. 
System.Data.Edm.EdmEntityType: : EntityType 'Delivery' has no key defined. Define the key for this EntityType. 
System.Data.Edm.EdmEntitySet: EntityType: EntitySet �OrderLine� is based on type �OrderLine� that has no keys defined. 
System.Data.Edm.EdmEntitySet: EntityType: EntitySet �Delivery� is based on type �Delivery� that has no keys defined. 

Bilmiyorum? Bu hata hakkında hiçbir fikrim yok .. Yardımcı olabilir misiniz? Modeller

namespace MvcApplication2.Models 
{ 
    public class OrderLine 
    { 
    public int basketId { get; set; } 
    public int productId { get; set; } 
    public int quantity { get; set; } 
    } 
} 
folder-- modeller

namespace MvcApplication2.Models 
{ 
    public class Delivery 
    { 
    public int trackId { get; set; } 
    public String address { get; set; } 
    public String postCode { get; set; } 
    public decimal deliveryPrice { get; set; } 
    public DateTime deliveryDate { get; set; } 
    public DateTime returnDate { get; set; } 
    } 
} 

--OrderLine.cs folder-- içinde

--UserController.cs--

namespace MvcApplication2.Controllers 
{ 
public class UserController : Controller 
    { 
    // 
    // GET: /User/ 
    rentalDB _db = new rentalDB(); 

    public ActionResult Index() 
    { 
     var model = _db.Customer; 
     return View(model); 
    } 
    } 
} 

--Delivery.cs

cevap

17

Varlık çerçevesini kullanmak için her öğeye bir anahtar gerekir. EF, nesneleri önbelleğinde izler, güncellemeleri temel veri deposuna geri gönderir ve ilgili nesneleri birbirine bağlar.

Sevgiler zaten sadece onlar hakkında EF anlatmak gerekiyor anahtarlarına sahip nesneleri: Eğer bir ilişkisel map yardımcı NHibernate veya Varlık framework gibi bir ORM (nesne ile ilişkisel eşleyici) çerçeve kullandığınızda

namespace MvcApplication2.Models 
{ 
    public class Delivery 
    { 
    [Key] public int trackId { get; set; } 
    public String address { get; set; } 
    public String postCode { get; set; } 
    public decimal deliveryPrice { get; set; } 
    public DateTime deliveryDate { get; set; } 
    public DateTime returnDate { get; set; } 
    } 
} 
+0

Bu benim için özel bir durumda çalıştı. Modelin kodunu yazdıktan sonra bir denetleyici ekledim ve hatayı almadım. Bu noktada, modelin istediğim gibi olmadığını, oluşturulan tüm görüntülerin çok yanlış olduğunu anladım, böylece denetleyiciyi/görünümleri sildim. Sonra modeli tamir ettiğimde ve kontrol cihazını eklediğimde hata ortaya çıktı. Bir saat uğraştıktan sonra [Key] ekledim ve işe yaradı. Belki görsel stüdyo Mvc tuhaflık veya önbellek, bilmiyorum ... – isitdanny

0

Veritabanındaki nesneler ile veritabanınızdaki veri satırları arasında anlamlı bir ilişki kurmanızı sağlayacak bir nesneye ihtiyaç duyacağınız bir nesne modeline veritabanı ve bu şey bir anahtardır (NHibernate olarak adlandırın) ve bu genellikle RDBMS'nin izlediği doğal yoldur. Birincil anahtar kullanarak kayıtlar (genellikle nesnenin anahtarı olarak DB birincil anahtarını kullanırsınız) == işlecini kullanarak iki nesnenin eşit olup olmadığını kontrol ettiğinizde Bu nesneler aynı referansa (veya hafızada adres) sahiptir. Bir ORM kullandığınızda bu tür bir eşitlik çok yararlı değildir. Farklı referanslarla belleğe bir kaydın birden çok örneğini yükleyebilirsiniz, böylece nesnelerin eşitliğini referansları ile kontrol etmek imkansızdır. Bu oyunda oyun ve anahtarlar ana role sahiptir.