2016-03-25 16 views
0

MVC 6 kullanarak bir Web API projesi oluşturuyorum ve this page üzerinde bulunan eğitici.MVC 6 kod ilk nesnesi eklendiğinde yabancı anahtar kısıtlaması yok sayılır

Models klasöründe ve bir Level sınıfında bir Kullanıcı sınıfı oluşturdum. Aralarındaki ilişki bir Kullanıcı'nın bir Seviye'ye sahip olması, bu yüzden Seviyenin birçok Kullanıcı ile ilişkilendirilmesidir (1'den çoğuna, sanırım). İşte her sınıf için de böyledir:

public class User 
{ 
    [Key] 
    public string username { get; set; } 

    //More attributes 

    [Required] 
    public int levelNumber { get; set; } 
    [ForeignKey("levelNumber")] 
    public virtual Level level { get; set; } 
} 

public class Level 
{ 
    [Key] 
    public int levelNumber { get; set; } 

    //More attributes 

    public virtual ICollection<User> users { get; set; } 
} 

Tamam ben her sınıf için Depolar ve Kontrolörler oluşturduktan sonra bu yüzden, bazı istekleri POST ve veritabanı beslemek için Fiddler kullanın. Bu JSON: {"levelNumber":"1", "name":"First Level", "icon":"myicon", "min_score":"0"} ile kimlik 1 ile bir düzey oluşturuyorum. Problemsiz yaratıldı.

Ardından yeni bir Kullanıcı oluşturmak istiyorum ve Seviye 1'e kimliğiyle başvurmalı, ancak görünüşe göre bunu görmezden geliyor. Ayrıca, varolan bir levelNumber kullanarak yeni bir kullanıcı oluşturursam, yabancı anahtar olmadığından kullanıcıyı oluşturmamalı, ancak yine de kullanıcıyı oluşturur. Bu JSON'u, kullanıcı referans düzeyi 1: {"username":"myuser", "fbID":"x", "firstname":"Name", "lastname":"Lastname", "gender":"male", "location":"GT", "levelNumber":"1"}'u oluşturmak için kullanıyorum. Sonra seviye 2'ye referans veren yeni bir kullanıcı yaratıyorum (mevcut değil): {"username":"myuser2", "fbID":"x", "firstname":"Name", "lastname":"Lastname", "gender":"male", "location":"GT", "levelNumber":"2"}.

Seviyeleri: enter image description here

kullanıcılar: Bu benim düzeyleri ve kullanıcılar için bir GET isteği ne zaman ne alıyorum enter image description here

benim modelleri ya da benim mantığı ile yanlış? Zaman ayırdığın için teşekkürler.

+0

veritabanını kontrol mü? Kullanıcı tablosundaki sütunda yabancı anahtar referansı var mı? Yakalama ve yutma istisnaları olmadığından emin misiniz? –

+0

Veritabanını nasıl kontrol edebilirim? Projemi localhost üzerinde çalıştırdığımda, önceki tüm veriler silinir. Ayrıca Azure'da yayınladığımda, önceki tüm veriler silinir. –

+0

Kullanıcıyı, var olmayan seviye 2 ile oluşturduğunuzda, 2 anahtarlı yeni bir seviye nesnesi de yaratıyor mu? –

cevap

1

Kullanıcı'yı seçerken seviye eklemelisiniz.

Context.Users.Include(x=>x.Level) 
+0

Bunu nerede kullanmalıyım? Nereye koyacağımı anlamıyorum. –

+0

Kullanıcıyı nasıl seçersiniz? –

+0

Bir ConcurrentDictionary kullanıyorum ve sadece return _users.Values; –

0

koyun [ForeignKey ("Seviye")] veri User.levelNumber özelliğinin üstünde açıklama ve kamu sanal Seviye seviyesinden çıkarın {get; set; }

Olmalıdır:

[Required] 
[ForeignKey("Level")] 
public int levelNumber { get; set; } 

public virtual Level level { get; set; } 
İlgili konular