আপনার বর্তমান অ্যাপ্লিকেশন ব্যবহারকারীটির জন্য সরাসরি ডাটাবেসটি জিজ্ঞাসা করার দরকার নেই।
এটি সূচনাকারীদের জন্য অতিরিক্ত প্রসঙ্গ থাকার একটি নতুন নির্ভরতা প্রবর্তন করে তবে ব্যবহারকারী ডাটাবেস সারণি পরিবর্তন (গত 2 বছরে 3 বার) তবে এপিআই সুসংগত। উদাহরণস্বরূপ usersএখন টেবিলটিকে AspNetUsersআইডেন্টিটি ফ্রেমওয়ার্কে ডাকা হয় এবং বেশ কয়েকটি প্রাথমিক কী ক্ষেত্রের নাম পরিবর্তন করা থাকে, তাই বেশ কয়েকটি উত্তরে কোডটি আর যেমন হয় তেমন কাজ করবে না ।
আর একটি সমস্যা হ'ল ডাটাবেসে অন্তর্নিহিত OWIN অ্যাক্সেসটি একটি পৃথক প্রসঙ্গ ব্যবহার করবে, সুতরাং পৃথক এসকিউএল অ্যাক্সেস থেকে পরিবর্তনগুলি অবৈধ ফলাফল আনতে পারে (যেমন, ডাটাবেসে পরিবর্তনগুলি না দেখে)। আবার সমাধানটি হ'ল সরবরাহ করা এপিআই দিয়ে কাজ করা এবং এর আশেপাশে কাজ করার চেষ্টা না করা।
এএসপি. নেট পরিচয় (এই তারিখের মতো) এ বর্তমান ব্যবহারকারী অবজেক্টটি অ্যাক্সেস করার সঠিক উপায় হ'ল:
var user = UserManager.FindById(User.Identity.GetUserId());
বা, আপনার যদি অ্যাসিঙ্ক অ্যাকশন থাকে তবে এর মতো কিছু:
var user = await UserManager.FindByIdAsync(User.Identity.GetUserId());
FindByIdআপনার নীচের ব্যবহারের নীচের বিবরণটি প্রয়োজন যাতে অ-অ্যাসিঙ্ক UserManagerপদ্ধতিগুলি পাওয়া যায় (এগুলি ইউজারম্যানেজারের জন্য এক্সটেনশন পদ্ধতি , তাই আপনি যদি এটি অন্তর্ভুক্ত না করেন তবে আপনি কেবল দেখতে পাবেন FindByIdAsync):
using Microsoft.AspNet.Identity;
আপনি যদি একেবারেই নিয়ন্ত্রণকারী না হন (যেমন আপনি আইওসি ইনজেকশন ব্যবহার করছেন), তবে ব্যবহারকারীর আইডি পুরো থেকে পুনরুদ্ধার করা হবে:
System.Web.HttpContext.Current.User.Identity.GetUserId();
আপনি যদি স্ট্যান্ডার্ড অ্যাকাউন্ট কন্ট্রোলারে না থাকেন তবে আপনার নিয়ামকটিতে আপনাকে নিম্নলিখিতগুলি (উদাহরণ হিসাবে) যুক্ত করতে হবে:
1. এই দুটি বৈশিষ্ট্য যুক্ত করুন:
/// <summary>
/// Application DB context
/// </summary>
protected ApplicationDbContext ApplicationDbContext { get; set; }
/// <summary>
/// User manager - attached to application DB context
/// </summary>
protected UserManager<ApplicationUser> UserManager { get; set; }
কন্ট্রোলার কনস্ট্রাক্টারে এটি যুক্ত করুন:
this.ApplicationDbContext = new ApplicationDbContext();
this.UserManager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(this.ApplicationDbContext));
মার্চ 2015 আপডেট করুন
দ্রষ্টব্য: পরিচয় কাঠামোর সর্বশেষতম আপডেট প্রমাণীকরণের জন্য ব্যবহৃত অন্তর্নিহিত শ্রেণীর মধ্যে একটি পরিবর্তন করে। আপনি এখন এটি এইচটিটিপি কনটেন্টের ওউইন প্রসঙ্গ থেকে অ্যাক্সেস করতে পারেন।
ApplicationUser user = System.Web.HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>().FindById(System.Web.HttpContext.Current.User.Identity.GetUserId());
সংযোজন:
রিমোট ডেটাবেস সংযোগের মাধ্যমে অ্যাজুরের সাথে ইএফ এবং পরিচয় ফ্রেমওয়ার্ক ব্যবহার করার সময় (যেমন অ্যাজুর ডাটাবেসের স্থানীয় হোস্ট টেস্টিং) আপনি এলোমেলোভাবে ভয়ঙ্কর আঘাত করতে পারেন "ত্রুটি: 19 - শারীরিক সংযোগ ব্যবহারযোগ্য নয়"। কারণ পরিচয় ফ্রেমওয়ার্কের ভিতরে কারণটি সমাহিত করা হয়েছে, যেখানে আপনি পুনরায় চেষ্টা যোগ করতে পারবেন না (বা যা অনুপস্থিত বলে মনে হচ্ছে .Include(x->someTable)) তাই আপনাকে SqlAzureExecutionStrategyআপনার প্রকল্পে একটি কাস্টম প্রয়োগ করতে হবে ।