2016-02-09 33 views
5

ilişkisel tablo/modelde ApplicationUser nasıl eklenir ApplicationUser ve ek tablo Step eklediğiniz bir ilişkisel tablo oluşturmak için çalışıyor.ASP.NET mvc

Ben Bu modelde benim girişimi vb

, ben ApplicationUser ayet IdentityUserUserManager ayet ne olduğu hakkında biraz kafam karıştı düşünüyorum.

Modelimi yeni bilgilere göre ayarladım, ancak yine de bunun doğru olup olmadığını bilmiyorum. Bununla usersteps bir dizin indirebiliriz:

var userSteps = db.UserSteps.Include(u => u.Step).Include(u => u.User); 
    return View(userSteps.ToList()); 

Ancak amacım mevcut kullanıcıya ilişkili tek adımları göstermektir. Sadece mevcut kullanıcıyı geri döndürmek için nasıl değiştireceğinize dair herhangi bir öneriniz var mı?

userstep için kontrol içinde

Güncelleştirme, bu yeni yöntem ilave edildi ve (darbeler) ondan bir görünümü oluşturduk. Amacım, geçerli kullanıcıyla ilişkili olan kullanıcı adımlarının bir listesini almaktır. Güncelleme 2'de anlattığınız bu değil mi?

public ActionResult UserStep() 
{ 
    var user = UserManager.FindById(User.Identity.GetUserId()); 
    var userStepsList = db.UserSteps.Where(u => u.UserId == user.Id); 
    return View(userStepsList); 

} 

Güncellendi - Çalışma Sürüm

ApplicationUser Modeli

Eklendi

public virtual ICollection<UserStep> UserSteps { get; set; } 

UserStep Modeli

public class UserStep 
{ 
    [ForeignKey("User")] 
    public string UserId { get; set; } 
    public int UserStepID { get; set; } 
    public int StepID { get; set; } 

    public virtual ApplicationUser User { get; set; } 
    public virtual Step Step { get; set; } 


} 
IdentityModel içinde 210

aşamalı Modeli

Eklenen

public virtual ICollection<UserStep> UserSteps { get; set; } 

oluşturuldu userstep kontrol ve kullanıcıya özel ilişkisel tablosunu görüntülemek için yeni bir yöntem oluşturmuştur.

public ActionResult UserStep() 
{ 
    var user = UserManager.FindById(User.Identity.GetUserId()); 
    var userStepsList = db.UserSteps.Where(u => u.UserId == user.Id).Include(u => u.Step).Include(u => u.User); 
    return View(userStepsList); 

} 
+0

UserStepId'in amacı nedir? UserStep bir birleştirme tablosu ise, UserStepId – CodeNotFound

+0

'a ihtiyacınız yoktur. Ancak, birden fazla kullanıcı kaydı olabilir. Örneğin, bir kullanıcı için birçok adım. Kodumu yeni bilgilere dayanarak düzeltdim. Herhangi bir öneri büyük takdir edilecektir. –

+0

Kyle - Önerilerinize dayalı bir güncelleme ekledim, ancak bir şeyleri kaçırıyor olabileceğimi hissediyorum. –

cevap

3

Step nesnesini uzantı olarak doğrudan ApplicationUser modeline ekleyebilirsiniz. Eğer IdentityModel.cs açarsanız

bunu gibi özellikler ekleyebilirsiniz:

public class ApplicationUser : IdentityUser 
    { 
     public virtual ICollection<Step> UserSteps { get; set; } 

     public async Task<ClaimsIdentity> blah blah 
     { 
      blah 
     } 
    } 

alt nesne (ebeveyne referans) senin yerinde olsaydım, ben ApplicationUser ebeveyn yapacak bir kimlik ekleyin (Bir ApplicationUser'ın bir veya daha fazla UserStep'i olduğu anlamına gelir) özelliği, public int UserId{get;set;} özelliğini ekleyerek belirli bir kullanıcı UserStep'i almanız gerektiğinde, kullanıcı kimliğiyle db.Steps'i sorgulayarak bunu yapabilirsiniz.

Bu yardımcı olur umarım, yarın erken kontrol edip tekrar deneyeceğim sorularla yorum yapın.

Güncelleme 1:

Eğer ApplicationUser kullanıcı referansı sen Adım eklemek istediğiniz için neler yakındır sahip bir yol. olsa bunun gibi daha fazla görünmesini sağlayın ... (Step nesnesinde)

public int UserID { get; set; } 
[ForeignKey("UserID")] 
public virtual ApplicationUser User { get; set; } 

süredir [ForeignKey ("")] beyanlar ben benimkini impliment nasıl farklı olduğunu, her şey senin istediğin olmadığından emin değilim fark yanlış olduğunu, ancak benim için çalışır biliyorum (gerçek model özelliği değil [ForeignKey()] olan [ForeignKey()] sahip

Ben uygulama ile ilk ilişkimi gerçekten çok zor olduğunu hatırlıyorum, ama çok önemli ve aldığınızda sevindirici. Sen gibi bir şey ile bir kullanıcıya bir başvuru çekecek

yorumunuza yanıt olarak 2

... Güncelleme

:

var user = db.Users.Where(u => u.Id = parameterID) 

parameterID kimliği geçirilen her ne ActionResult, UserSteps koleksiyonunuzu aldınız. Sadece cari Kullanıcılar kimliğini almak istiyorsa, böyle bir şey deneyin: Ardından, sadece o Kullanıcının kimliğinden userSteps listesi için sorgulamak

var user = UserManager.FindById(User.Identity.GetUserId()); 

var userSteps = db.UserSteps.Where(u => u.UserID == user.Id) 

sonra View (userSteps) geri dönebilirler UserStep nesnesinin bir listesi için doğrudan bağlanan bir görünümünüz varsa (bunlar sizin yerindeyseniz bunları nasıl görüntülerim).

Bunun sizin için uygun olduğunu umarız, daha sonra tekrar kontrol edeceğim.

+0

Teşekkürler çocuklar. Daha yakın görünüyor. Bazı görüşleri scaffoldedim ve ilişkiyi elle ekleyebilir ve sonra tüm ilişkilerin bir listesini görüntüleyebilirim. Benim yorumumdan önce çalıştığım bir yönü aldım - genel sanal ICollection UserSteps {get; set; } listelediğiniz şey yerine benim uygulayıcı modelimde. Farkı açıklayabilir misiniz? Ayrıca, bu ilişkilerin şimdi nasıl yapıldığını anlamaya başladığım halde, yalnızca bir kullanıcı için yalnızca kullanıcıların adımlarını nasıl görüntüleyeceğimiz konusunda kafam karışıyor. Yukarıdaki 2. kod bölümüne cevap verebilir misiniz? –

+0

Liste aslında benim için bir yazım hatasıydı, ben özür dilerim, ICollection sadece bu şekilde devam et. –

+0

Teşekkürler Kyle. vs seninki daha idi. Bu işlevsellik daha iyi için çalışma şeklini değiştirecek mi? Hala birkaç hata alıyorum ama daha sonra bugün biraz daha zaman geçirmeyi umuyorum. Yardım için tekrar görüşürüz ve aynı fikirdeyim, bu benim bilgimi doldurmak için çok önemli bir delik gibi görünüyor. –