2016-02-09 5 views
5

में एक रिलेशनल टेबल/मॉडल में एप्लिकेशन यूज़र को कैसे शामिल करें I ApplicationUser और एक तालिका जो मैंने Step जोड़ा है, के बीच एक संबंध तालिका बनाने का प्रयास कर रहा है।एएसपीनेट एमवीसी

मुझे लगता है कि मैं एक छोटे से क्या ApplicationUser कविता IdentityUserUserManager कविता है लेकर संदेह में हूँ, आदि

यह मॉडल पर मेरे प्रयास है।

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; } 
} 

मैंने नई जानकारी के आधार पर अपना मॉडल समायोजित किया है, हालांकि मुझे अभी भी पता नहीं है कि यह सही है या नहीं। मैं इस के साथ usersteps के एक सूचकांक खींच कर सकते हैं:

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

हालांकि मेरा लक्ष्य केवल वर्तमान उपयोगकर्ता के लिए जुड़े चरण दिखाने का है। केवल वर्तमान उपयोगकर्ता को वापस करने के लिए इसे बदलने के तरीके पर कोई सुझाव?

अद्यतन

userstep के लिए नियंत्रक के भीतर, मैं इस नई विधि को जोड़ कर उसे से एक दृश्य (जो ऊपर चल रही है) बनाया है। मेरा लक्ष्य वर्तमान उपयोगकर्ता से जुड़े उपयोगकर्तास्टेप्स की एक सूची प्राप्त करना है। क्या यह आपके अपडेट 2 में वर्णित नहीं है?

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

} 

अपडेट किया गया - कार्य संस्करण

ApplicationUser मॉडल IdentityModel में

जोड़ा गया

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

UserStep मॉडल

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; } 


} 

चरण मॉडल

जोड़ा गया

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

बनाया userstep नियंत्रक और उपयोगकर्ता विशिष्ट रिलेशनल तालिका देखने के लिए एक नई विधि का निर्माण किया।

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 का उद्देश्य क्या है? यदि UserStep एक जॉइन टेबल में है तो आपको UserStepId – CodeNotFound

+0

की आवश्यकता नहीं है हालांकि कई उपयोगकर्तास्टेप हो सकते हैं। उदाहरण के लिए, एक उपयोगकर्ता के लिए कई कदम। मैंने नई जानकारी के आधार पर उपरोक्त अपना कोड समायोजित किया है। किसी सुझाव के लिए बहुत आभारी होंगे। –

+0

केली - मैंने आपके सुझाव के आधार पर एक अद्यतन जोड़ा, लेकिन मुझे लगता है कि मुझे कुछ याद आ रहा है। –

उत्तर

3

आप सीधे एप्लिकेशन उपयोगकर्ता मॉडल को एक्सटेंशन के रूप में चरण वस्तु जोड़ सकते हैं।

आप IdentityModel.cs खोल यदि आप तो जैसे गुण जोड़ सकते हैं:

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

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

बच्चे वस्तु (माता-पिता के लिए संदर्भित) अगर मैं तुम्हें थे, मैं ApplicationUser माता पिता होगा करने के लिए एक आईडी जोड़ें (जिसका मतलब है कि एप्लिकेशन यूज़र में एक या कई उपयोगकर्तास्टेप्स हैं) public int UserId{get;set;} संपत्ति जोड़कर ताकि जब आपको कोई विशेष उपयोगकर्ता उपयोगकर्तास्टेप प्राप्त करने की आवश्यकता हो, तो आप उपयोगकर्ता की आईडी के साथ db.Steps से पूछकर ऐसा कर सकते हैं।

आशा है कि इससे मदद मिलेगी, प्रश्नों के साथ टिप्पणी करें और कल जल्दी जांच लेंगे।

अद्यतन 1:

जिस तरह से आप ApplicationUser करने के लिए उपयोगकर्ता संदर्भ क्या आप चरण में जोड़ना चाहते हैं जा रहे हैं के करीब है। यह हालांकि यह कुछ ऐसा दिखाई करें ... (अपने कदम वस्तु में)

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

मैंने देखा अपने [ForeignKey ("")] घोषणाओं मैं कैसे मेरा impliment से अलग थे, मुझे यकीन है कि नहीं कर रहा हूँ अगर अपना रास्ता गलत है, हालांकि मुझे पता है कि मेरा तरीका मेरे लिए काम करता है (नेविगेशन प्रॉपर्टी पर [विदेशीकी()] होने के कारण, असली मॉडल प्रॉपर्टी नहीं)

मुझे याद है कि एप्लिकेशनसर के साथ मेरा पहला रिश्ता वास्तव में मुश्किल था, लेकिन यह इतना महत्वपूर्ण है और जब आप इसे प्राप्त करते हैं तो संतुष्ट।

अद्यतन 2

अपनी टिप्पणी के जवाब में ...

आप की तरह कुछ के द्वारा एक उपयोगकर्ता के लिए एक संदर्भ हड़पने जाएगा:

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

parameterID आईडी पर पारित किया जा रहा है जो कुछ भी ActionResult आप UserSteps का संग्रह प्राप्त कर रहे हैं। तुम सिर्फ पाने के लिए वर्तमान उपयोगकर्ता आईडी चाहता था, तो कुछ इस तरह की कोशिश: तो फिर तुम सिर्फ इतना है कि उपयोगकर्ता की आईडी से userSteps की सूची के लिए क्वेरी

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

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

आप तो लौट सकते हैं देखें (userSteps) यदि आपके पास UserStep ऑब्जेक्ट्स की सूची के लिए सीधे बाध्यकारी दृश्य है (यदि मैं आप थे तो मैं इन्हें कैसे प्रदर्शित करूंगा)।

आशा है कि यह आपके लिए काम करेगा, मैं बाद में फिर से जांच करूंगा।

+0

धन्यवाद दोस्तों। यह बहुत करीब लगता है। मैं कुछ विचारों को मचान करने में सक्षम हूं और मैन्युअल रूप से संबंध जोड़ सकता हूं और फिर सभी संबंधों की एक सूची देख सकता हूं। मुझे आपकी टिप्पणी से पहले एक पहलू काम करना पड़ा जहां मेरे पास है - सार्वजनिक वर्चुअल आईसीलेक्शन उपयोगकर्तास्टेप्स {प्राप्त करें; सेट; } जो आपने सूचीबद्ध किया है उसके बदले मेरे एप्यूसर मॉडल में। क्या आप अंतर को समझाने में सक्षम होंगे? इसके अतिरिक्त, जब मुझे यह समझना शुरू हो रहा है कि अब इन रिश्तों को कैसे बनाया जाता है, मैं अभी भी एक उपयोगकर्ता के लिए उपयोगकर्ताओं के चरणों को देखने के तरीके के बारे में उलझन में हूं। क्या आप ऊपर दिए गए कोड के मेरे दूसरे खंड का जवाब दे पाएंगे? –

+0

सूची वास्तव में मेरे द्वारा एक टाइपो थी, मैं क्षमा चाहता हूं, आईसीओलेक्शन इस तरह से ठीक काम करेगा। –

+0

धन्यवाद केली। यह बनाम का बनाम था। क्या कार्यक्षमता बेहतर तरीके से काम करने के तरीके को बदल देगी? मुझे अभी भी कुछ त्रुटियां मिल रही हैं लेकिन मुझे आज बाद में कुछ और समय बिताने की उम्मीद है। सहायता के लिए फिर से थक्स और मैं सहमत हूं, यह मेरे ज्ञान को भरने के लिए ऐसा एक महत्वपूर्ण छेद जैसा लगता है। –