PDA

View Full Version : سوال: اضافه کردن Identity 2.0



alireza_rashvand
یک شنبه 13 مهر 1393, 15:43 عصر
سلام می دونم چند جا در این سایت بحث شده ولی واقعا دقیق گفته نشد و هر چی خوندم بیشتر گیج شدم. شاید به این خاطر است که دوستان از وسط یادگیری مطالب را ارائه میدهند موضوع خود را مطرح می کنند. قصد دارم در این تاپیک از صفر موضوع را بررسی کنیم.

قسمت لاگین برنامه رو ننوشتم قسمت های مختلف رو نوشتم و امروز سعی کردم Identity رو اضافه کنم .
یه اشتباه کردم کپی از پروژه نگرفتم (دوستانی حتما اشتباه من رو تکرار نکنید!) و بعد از
PM> Install-Package Microsoft.AspNet.Identity.Samples -Pre
بعضی از کلاس ها و فایل هام جایگزین شد(از دست رفت)

چند سوال برام پیش اومد
1- مگر Identity 1.0 هم داریم؟!
VS2013 دارم ایا باید به 2 ابدیت کنم یا نه؟

2- برای اضافه کردن به پروژه چگونه باید اقدام کرد.؟



لطفا از صفر بگید که هر کس مثل من خواست این کار رو بکنه این تاپیک مشکلش رو حل کنه.
سپاس از دوستان و اساتید.

HOSSEINONLINE7
یک شنبه 13 مهر 1393, 19:13 عصر
سلام با همین دستور باید اضافه کرد .

بله Identity 1 هم داریم ولی 2 پیچیده تر هست و امکانات بیشتری داره .

ویژوال استادیو من آپدیت 2 هست ولی خودش Identity 1 را اضافه میکنه و من خودم با همون دستور 2 را اضافه میکنم .

خود من از EfCode First استفاده میکردم و Identity 2 را به پروژه اضافه کردم و میخواستم جدول Users که خود Identity میسازه را به جداول پروژه ی خودم ارتباط بدم و بینشون Relation برقرار کنم ولی هرکاری کردم خطای ناسازگاری جداول خودم با اون جدول ها را میداد و هرچقدر هم سرچ کردم و پرسیدم مشکلم حل نشد . مجبور شدم خودم احراز هویت را بنویسم .

اگر کسی تجربه ی کار را داره لطفا راهنمایی کنه .

RIG000
یک شنبه 13 مهر 1393, 23:17 عصر
این قضیه identity چیه اصلا"؟ من نفهمیدم موضوع چیه ؟!!برای چه کاری بدرد میخوره؟

HOSSEINONLINE7
دوشنبه 14 مهر 1393, 05:06 صبح
این قضیه identity چیه اصلا"؟ من نفهمیدم موضوع چیه ؟!!برای چه کاری بدرد میخوره؟

یک نگاهی به این بندازی متوجه میشی
http://www.dotnettips.info/post/1770/asp-net-mvc-%D9%88-identity-2-0-%D9%85%D9%81%D8%A7%D9%87%DB%8C%D9%85-%D9%BE%D8%A7%DB%8C%D9%87

mohammadreza.najafipour
دوشنبه 14 مهر 1393, 06:39 صبح
البته دوستان و بزرگواران این مسائل رو بهتر میدونند اما جا داره اینجا دوباره اشاره کنیم. نکته ی اول اینکه همیشه پروژه تون رو روی یه سرور مدیریت سورس بذارید، SVN یا Git و ...
همین هفته ی قبل بود که به همراه دوستان سعی داشتیم Identity رو به پروژه اضافه کنیم(مثل آقای رشوند) و همه ی فایل ها از دست رفت، اما چون از SVN استفاده می کردیم تغییرات رو با موفقیت برگردوندیم و به مشکلی بر نخوردیم :لبخندساده:
در ویژوال استودیو 2013 پیش فرض Identity 1 بر روی پروژه ها نصب میشه که میشه اون رو از Nuget به نسخه ی 2 ارتقا داد.
نمیدونم این راه چقدر اصولی هست اما ما این کار رو کردیم:
1- یه پروژه ای به اسم testIdentity ساختیم و Identity.samples رو بر روی اون پروژه نصب کردیم.
2- فایل های مربوطه رو به پروژه ی اصلی اضافه کردیم و هر جایی که نیاز بود تغییر دادیم.
و الان داریم از Identity استفاده می کنیم :لبخندساده:

HOSSEINONLINE7
دوشنبه 14 مهر 1393, 09:34 صبح
البته دوستان و بزرگواران این مسائل رو بهتر میدونند اما جا داره اینجا دوباره اشاره کنیم. نکته ی اول اینکه همیشه پروژه تون رو روی یه سرور مدیریت سورس بذارید، SVN یا Git و ...
همین هفته ی قبل بود که به همراه دوستان سعی داشتیم Identity رو به پروژه اضافه کنیم(مثل آقای رشوند) و همه ی فایل ها از دست رفت، اما چون از SVN استفاده می کردیم تغییرات رو با موفقیت برگردوندیم و به مشکلی بر نخوردیم :لبخندساده:
در ویژوال استودیو 2013 پیش فرض Identity 1 بر روی پروژه ها نصب میشه که میشه اون رو از Nuget به نسخه ی 2 ارتقا داد.
نمیدونم این راه چقدر اصولی هست اما ما این کار رو کردیم:
1- یه پروژه ای به اسم testIdentity ساختیم و Identity.samples رو بر روی اون پروژه نصب کردیم.
2- فایل های مربوطه رو به پروژه ی اصلی اضافه کردیم و هر جایی که نیاز بود تغییر دادیم.
و الان داریم از Identity استفاده می کنیم :لبخندساده:

پس شما که تجربه دارید لطفا ما را هم راهنمایی بفرمایید تا مشکلمون حل بشه و بتونیم ازش استفاده کنیم .

توی این تاپیک در مورد مشکل بحث شد ولی در آخر نتیجه نگرفتم !

http://barnamenevis.org/showthread.php?468051-%D9%86%D8%AD%D9%88%D9%87-%DB%8C-%D8%A7%D8%B6%D8%A7%D9%81%D9%87-%DA%A9%D8%B1%D8%AF%D9%86-Identity-%D8%A8%D9%87-%D9%84%D8%A7%DB%8C%D9%87-%D9%87%D8%A7%DB%8C-%D9%BE%D8%B1%D9%88%DA%98%D9%87

من میخوام از جدول users خود Identity استفاده کنم و به جدول Posts از پروژه ی خودم متصل کنم تا کاربران از اونجا شناسایی بشن . ولی مشکل بوجود میاد ...

mohammadreza.najafipour
پنج شنبه 17 مهر 1393, 20:50 عصر
پس شما که تجربه دارید لطفا ما را هم راهنمایی بفرمایید تا مشکلمون حل بشه و بتونیم ازش استفاده کنیم .

توی این تاپیک در مورد مشکل بحث شد ولی در آخر نتیجه نگرفتم !

http://barnamenevis.org/showthread.php?468051-%D9%86%D8%AD%D9%88%D9%87-%DB%8C-%D8%A7%D8%B6%D8%A7%D9%81%D9%87-%DA%A9%D8%B1%D8%AF%D9%86-Identity-%D8%A8%D9%87-%D9%84%D8%A7%DB%8C%D9%87-%D9%87%D8%A7%DB%8C-%D9%BE%D8%B1%D9%88%DA%98%D9%87

من میخوام از جدول users خود Identity استفاده کنم و به جدول Posts از پروژه ی خودم متصل کنم تا کاربران از اونجا شناسایی بشن . ولی مشکل بوجود میاد ...

سلام دوست عزیز.
بابت تاخیر عذر میخوام،چند روزی هست که سرم شلوغه :لبخندساده:
جواب رو توی تاپیک قبلی دادم:
http://barnamenevis.org/showthread.php?468051-%D9%86%D8%AD%D9%88%D9%87-%DB%8C-%D8%A7%D8%B6%D8%A7%D9%81%D9%87-%DA%A9%D8%B1%D8%AF%D9%86-Identity-%D8%A8%D9%87-%D9%84%D8%A7%DB%8C%D9%87-%D9%87%D8%A7%DB%8C-%D9%BE%D8%B1%D9%88%DA%98%D9%87&p=2115878&viewfull=1#post2115878

توضیح اینکه برای انجام اینکار از لینک زیر کمک گرفته بودیم:

http://stackoverflow.com/questions/24475351/asp-identity-table-column-change-but-mapping-is-not-possible-with-new-column-nam

alireza_rashvand
شنبه 19 مهر 1393, 18:00 عصر
با تشکر از اقای نجفی پور عزیز , فکر کنم باید کار شما رو انجام بدم یک پروژه صفر همراه با نصب
Identity داشته باشم و بعد از ان سورس های خودم رو به ان اضافه کنم.

hp1361
شنبه 19 مهر 1393, 19:36 عصر
سلام

آقای نجفی پور عزیز اگه ممکنه در خصوص نحوه استفاده از Identity 2.0 همراه IUnitOfWork هم توضیح بدید

ممنون

alireza_rashvand
دوشنبه 21 مهر 1393, 00:58 صبح
معمولا زمانی تاپیکی رو ایجاد می کنم که خودم می خواهم از صفر ان موضوع رو دنبال کنم, چون تازه کار هستم حتما تاپیک هایم به درد تازه وارد ها خواهد خورد, هم خودم یاد می گیرم هم اگر کسی بعد ها خواست تازه این بحث را شروع کنه بدردش می خوره...

تا اینجای کار با توجه به توضیحات دوستان متوجه شدم بهترین کار اینکه یک پروژه تازه ایجاد کنم همراه با نصب Identity 2.0
البته وقتی پروژه خالی ایجاد می کنیم همان ابتدا امکان احراز هویت رو می شه انتخاب کرد, (تا خود به خود اعمال بشه) ولی کد زیر رو هم اعمال کردم که اگر اپدیتی در کار بود خودش اعمال کنه(با توجه به توضیح دوستان)
PM> Install-Package Microsoft.AspNet.Identity.Samples -Pre

برای اینکه فایل های خودمان را بروی ان اصلاح کنیم :

1- ارتباط با دیتابیس:
اول) یک connectionString در Web.config ساختم و نامش رو گذاشتم Context
دوم) رفتم به کلاس ApplicationDbContext کد زیر رو تغییر دادم

public ApplicationDbContext()
: base("Context", throwIfV1Schema: false)
{
}

حالا اگه برنامه رو اجرا کنیم و یک ثبت نام انجام بدیم دیتابیس ها بر اساس نامی که به connectionString دادیم ایجاد می شه.

Identity جداولی رو به صورت خودکار ایجاد می کنه مهترین ان AspNetUsers است که کاربران را برای ما در نظر می گیره.

2- چگونه می شود به این جدول (AspNetUsers) فیلدی اضافه کرد؟

راه حل را hakim22 (http://barnamenevis.org/member.php?244339-hakim22) گفته اند(لینک (http://barnamenevis.org/showthread.php?463981-Simple-member-ship%D8%8C-Custom-Member-ship%D8%8C-Identity-2-0-%DA%A9%D8%AF%D8%A7%D9%85-%DB%8C%DA%A9%D8%9F%D8%9F%D8%9F&p=2078297&viewfull=1#post2078297)) و در این مقاله (http://www.dotnettips.info/post/1645/%D8%B3%D9%81%D8%A7%D8%B1%D8%B4%DB%8C-%DA%A9%D8%B1%D8%AF%D9%86-asp-net-identity-%D8%AF%D8%B1-mvc-5)هم توضیح داده شده.
خلاصه اینکه کافیه موارد مورد نیاز خودمون را به ApplicationUser اضافه کنیم تا در AspNetUsers اضافه بشه(به وسیله ارتباطش با IdentityUser ).
مثلا:


public class ApplicationUser : IdentityUser
{
public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager)
{
// Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType
var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
// Add custom user claims here
return userIdentity;
}
public string Address { get; set; }
}

کد بالا ادرس رو به جدول کاربران اضافه می کنه.
برای اعمال شدن(و مشاهده) این تغییرات از Migration استفاده کردم.
خلاصه استفاده از ازMigration:
- Enable-Migrations برای فعال سازی
- Add-Migration TUDProject (نام دلخواه)
- Update-Database

3- چطور می شه جدول های دیگری که داریم را به این پروژه جدید اضافه کرد

من هنوز متوجه نشدم که چطور باید جداول دیگر را اضافه کرد, شاید سردرگمی از اینجاست که قبل از این من یک مودل می نوشتم مثلا Post بعد در کلاس Context که از DbContext ارث بری کرده بود DbSet می کردم, و می دانستم که برنامه به دنبال DbContext می گردد و حالا که ما ارث بری کردیم مودل مورد نظر ما را هم می سازد... ولی اینجا نمی دانم چه گونه است...

دوستان اگر می دانند توضیحی در مورد قسمت 3 بدهند

اگر موضوعی رو اشتباه گفتم لطفا بگید

hp1361
دوشنبه 21 مهر 1393, 10:44 صبح
سلام

اگر قراره از DBContext مربوط به Identity استفاده کنی(IdentityDbContext) در اینصورت همون عملیاتی که گفتی رو باید در قیمت IdentityDbContext انجام بدی. یعنی اینکه بیای بصورت DbSet<> کلاس هات رو به IdentityDbContext معرفی کنی تا IdentityDbContext هم جداول مربوط به این کلاس ها رو در بانکی به در ConnectionString معرفی کردی بسازه.

این کد
PM> Install-Package Microsoft.AspNet.Identity.Samples -Pre
که گفتی استفاده میکنی تا آپدیتی اگر هست رو اعمال کنه کارش چیز دیگه ای است. قبل از اینکه نسخه Identity 2.0 بصورت رسمی ارائه این کدها که حاوی مثال هم هستند در مخزنی قرار داشتند تا علاقمندان با مطالعه اون با موضوع آشانا بشن.
اگر از Visual Studio Update 3 استفاده کنید خودش در پروژه ایجاد شده از Identity 2.0 استفاده میکنه. ضمنا برای اطمینان از بروزبودن بخش های مختلف برنامه از کد زیر میتونید استفاده کنید

PM> Update-Package

mohammadreza.najafipour
دوشنبه 21 مهر 1393, 12:58 عصر
با تشکر از اقای نجفی پور عزیز , فکر کنم باید کار شما رو انجام بدم یک پروژه صفر همراه با نصب
Identity
داشته باشم و بعد از ان سورس های خودم رو به ان اضافه کنم.
خواهش می کنم. البته فکر کنم منظورم رو در جواب قبلی بد رسوندم :لبخندساده: یه پروژه ی جدا درست کنید و برای مثال اسم اون رو IdentityTest بذارید. بعدش روی اون Sampleهای Identity رو نصب کنید. حالا می تونید فایل های پروژه رو از این پروژه به پروژه ی خودتون انتقال بدید و تغییرات لازم رو انجام بدید.

mohammadreza.najafipour
دوشنبه 21 مهر 1393, 13:05 عصر
سلام

آقای نجفی پور عزیز اگه ممکنه در خصوص نحوه استفاده از Identity 2.0 همراه IUnitOfWork هم توضیح بدید

ممنون
متاسفانه اطلاعاتی در مورد استفاده ی Identity با IUnitOfWork ندارم ولی فکر کنم لینک های زیر مفید باشه:
http://stackoverflow.com/questions/23226140/asp-net-identity-with-repository-and-unit-of-work
http://odetocode.com/blogs/scott/archive/2014/01/03/asp-net-identity-with-the-entity-framework.aspx

alireza_rashvand
پنج شنبه 24 مهر 1393, 18:31 عصر
سلام

اگر قراره از DBContext مربوط به Identity استفاده کنی(IdentityDbContext) در اینصورت همون عملیاتی که گفتی رو باید در قیمت IdentityDbContext انجام بدی. یعنی اینکه بیای بصورت DbSet<> کلاس هات رو به IdentityDbContext معرفی کنی تا IdentityDbContext هم جداول مربوط به این کلاس ها رو در بانکی به در ConnectionString معرفی کردی بسازه.

این کد
PM> Install-Package Microsoft.AspNet.Identity.Samples -Pre
که گفتی استفاده میکنی تا آپدیتی اگر هست رو اعمال کنه کارش چیز دیگه ای است. قبل از اینکه نسخه Identity 2.0 بصورت رسمی ارائه این کدها که حاوی مثال هم هستند در مخزنی قرار داشتند تا علاقمندان با مطالعه اون با موضوع آشانا بشن.
اگر از Visual Studio Update 3 استفاده کنید خودش در پروژه ایجاد شده از Identity 2.0 استفاده میکنه. ضمنا برای اطمینان از بروزبودن بخش های مختلف برنامه از کد زیر میتونید استفاده کنید

PM> Update-Package

سپاس حق با شماست...



یه پروژه ی جدا درست کنید و برای مثال اسم اون رو IdentityTest بذارید. بعدش روی اون Sampleهای Identity رو نصب کنید. حالا می تونید فایل های پروژه رو از این پروژه به پروژه ی خودتون انتقال بدید و تغییرات لازم رو انجام بدید.


به نظرم سخت باشه تمام فایل ها مورد نیاز
Identity (بعد از نصب) را برداشت به پروژ اصلی اضافه کرد این گونه نیست؟
فکر کنم بهترین کار اینکه از همان ابتدا Identity را نصب کنیم بعد شروع کنیم به نوشتن پروژه :) من شما کارمان را سخت کردیم, البته من از ابتدا از Identity ترسیدم :)
(دیدم همش داره تغییر می کنه دست نگه داشتم) برای همین گذاشتم برای بعد که فکر کنم بهترین کار اینکه از همان ابتدا با نصب Identity شروع کنیم...

mohammadreza.najafipour
پنج شنبه 24 مهر 1393, 19:23 عصر
سپاس حق با شماست...


به نظرم سخت باشه تمام فایل ها مورد نیاز
Identity (بعد از نصب) را برداشت به پروژ اصلی اضافه کرد این گونه نیست؟
فکر کنم بهترین کار اینکه از همان ابتدا Identity را نصب کنیم بعد شروع کنیم به نوشتن پروژه :) من شما کارمان را سخت کردیم, البته من از ابتدا از Identity ترسیدم :)
(دیدم همش داره تغییر می کنه دست نگه داشتم) برای همین گذاشتم برای بعد که فکر کنم بهترین کار اینکه از همان ابتدا با نصب Identity شروع کنیم...



درست می فرمایید اما اینکار برای وقتیکه از وسط پروژه تصمیم به اضافه کردن Identity گرفتیم تصمیم خوبی بود :لبخندساده:
با شما موافقم، از اول نصب کردن خیلی بهتره ...

hp1361
پنج شنبه 24 مهر 1393, 22:40 عصر
سلام مجدد

پیشنهاد میکنم فصل های 13و 14 و 15 کتاب Pro.ASP.NET.MVC.5.Platform رو مطالعه کنید تا بخوبی از کدهایی که در فایل هایی چون Startup و identityconfig نوشته سر در بیارید.

البته باید توجه داشته باشید چون خودتون دارید مطالعه میکنید شاید یادگیری مطالب بیشتر زمان ببره نسبت به زمانیکه یکی براتون توضیح میده

موفق باشیم

alireza_rashvand
جمعه 25 مهر 1393, 01:22 صبح
کتاب را دانلود کردم حتما وقت کنم مطالعه خواهم کرد سپاس.

برای ایجاد جداول دیگه, راه حلی که رفتم :
یک مودل به نام Post ایجاد کرد
ابتدا مثل قبل که به کاربر ادرس رو اضافه کردم Post را اضافه کردم(چون پست به کاربر در ارتباط هست وگرنه نیازی به نوشتنش در این جا نبود)

public class ApplicationUser : IdentityUser
{
public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager)
{
// Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType
var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
// Add custom user claims here
return userIdentity;
}
public string Address { get; set; }
public ICollection<Post> Post { set; get; }
}

بعد در کلاس ApplicationDbContext ست کردم (DbSet)


public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext()
: base("Context", throwIfV1Schema: false) { }

static ApplicationDbContext()
{
// Set the database intializer which is run once during application start
// This seeds the database with admin user credentials and admin role
Database.SetInitializer<ApplicationDbContext>(new ApplicationDbInitializer());

}
public DbSet<Post> Post { get; set; }
public static ApplicationDbContext Create()
{
return new ApplicationDbContext();
}
}


جدول را که اپدیت کردم جالب بود خودش اومده کلید خارجی ApplicationUser_Id رو ایجاد کرده !
(در Post هیچ اشاره ای به جدول کاربر نکرده بودم)
و جالبتر اینکه در Post , چون Comment مرتبط شده بود(با کد زیر)
public ICollection<Comment> Comments { get; set; }

بدون اینک DbSet این مودل را بنویسم خود به خود ایجاد شده بود.

124605

alireza_rashvand
جمعه 25 مهر 1393, 16:48 عصر
فکر کنم تا اینجا موضوع ایجاد دینابیس حل شده باشه(التبه اگر در کامنت قبل اشتباه کردم بفرمایید)
1- ایجاد جدول کاربران و ویرایش ان.
2- ایجاد جدول ها دیگر.

حالا باید موضوع دیگری هم بررسی بشه...
navigation properties ها, LINQ ها یا در کل چطور باید از موجودیت ها استفاده کرد... (در حالت Identity)

مثلا برای نمایش 5 پست من از این کد استفاده می کنم..


model = db.Posts.OrderByDescending(r => r.CreateDate).Take(5).ToList();

کد خیلی مدنظرم نیست موضوع اصلی db است.
db از Context و خودش از DbContext ارث بری کرده بود ... (بالاتر در موردش گفتگو کردیم)
حالا در وضعیت Identity چطور است؟ به نظرم db را باید از ApplicationDbContext نیو کرد چون از IdentityDbContext ارث بری کرده ولی جواب نداد,
اگر دوستان یک کد به عنوان مثال بدند ممنون می شم که ببینیم در وضعیت Identity چطور از مودل ها استفاده می کنند.


خیلی ببخشید اگر سوال هایم مبتدیانه است.

sunn789
جمعه 25 مهر 1393, 19:07 عصر
خوب دوستان دیدم حیف است من هم تجربیات خودم رو اضافه نکنم
مطلب اول اینکه حال که تو ایران ک.پ.ی ر.ا.ی.ت ندارم به راحتی میشه ار اخرین ورژن ویژال استفاده کرد و حتماً هم از Update 3 استفاده کنید چون Identity 2 به راحتی جا سازی شده
مطلب دوم اینکه من مدت مدید است که از مثال Identity استفاده میکنم اما این برای ویژال بدون آپدیت بهتره چون زمانی که شما از طریق Nuget مثال رو اضافه میکنید کلی کدهای شما رو برمیگردونه به عقب تر،
خوب تا اینجا دو بار توی این هفته پروژه جدید که استارت میزدم به این نتیجه رسیدم با استفاده از مقایسه خودم به صورت دستی کدها رو اضافه کنم ، که بهرین کار بود چو ان زمان بود که دیدم توی اپدیت 3 خیلی از کدها به بهترین نحو اضافه شدن فقط بعضی هاشون به صورت کامنت شده و پیشنهاد داده که میتوانید از کامت خارجشون کنید .
و اما در اخرین تمرینی که داشتم به این نتیجه رسیدم اصلاً نیازی به اضافه کردن مثال نیست ريال فقط Seed رو به پروژه اضافه کردم که یک کاربر با دسترسی SuperAdmin(این که چرا ادمین رو به سوپر ادمین تغییر دادم ماجرا ها داره ) اضافه کردم ، فقط تفوتی که داشت باید ApplicationDbInitializer رو باید در configقسمت Start_App خودم اضافه میکردم که خوب شد و خیلی هم خوب بود
اها یه جای جلب دیگه هم داشت ، زمانی به اپدیت 3 ارتقا میدین DbSet ها رو در ابتدا خودش اضافه میکنه و یک مشکل پیش میاره ، اینکه اکر کلاسی رو مثلاً Post اضافه کنید خطا و از User بخواهید در اون لینکی داشته باشید خطایی دال بر User و ApplicationDbUser از یک جنس هستند دریافت میکنید (البته الان کل خطا یادم نیست ولی این معنی داشت ) که باید همونجایی که DbSet ها رو مینوشتید ApplicationDbUser رو حذف کنید
ببخشید اگر بد نوشتم ، اما همچنان هستیم:چشمک::چشمک:

hakim22
شنبه 26 مهر 1393, 09:40 صبح
فکر کنم تا اینجا موضوع ایجاد دینابیس حل شده باشه(التبه اگر در کامنت قبل اشتباه کردم بفرمایید)
1- ایجاد جدول کاربران و ویرایش ان.
2- ایجاد جدول ها دیگر.

حالا باید موضوع دیگری هم بررسی بشه...
navigation properties ها, LINQ ها یا در کل چطور باید از موجودیت ها استفاده کرد... (در حالت Identity)

مثلا برای نمایش 5 پست من از این کد استفاده می کنم..


model = db.Posts.OrderByDescending(r => r.CreateDate).Take(5).ToList();

کد خیلی مدنظرم نیست موضوع اصلی db است.
db از Context و خودش از DbContext ارث بری کرده بود ... (بالاتر در موردش گفتگو کردیم)
حالا در وضعیت Identity چطور است؟ به نظرم db را باید از ApplicationDbContext نیو کرد چون از IdentityDbContext ارث بری کرده ولی جواب نداد,
اگر دوستان یک کد به عنوان مثال بدند ممنون می شم که ببینیم در وضعیت Identity چطور از مودل ها استفاده می کنند.


خیلی ببخشید اگر سوال هایم مبتدیانه است.

من از این روش زیاد استفاده کردم و هیچ مشکلی نداره. وقتی می گویید جواب نداد بهتر بود توضیح میدادید که آیا با خطایی مواجه می شوید یا ...

alireza_rashvand
شنبه 26 مهر 1393, 20:16 عصر
من از این روش زیاد استفاده کردم و هیچ مشکلی نداره. وقتی می گویید جواب نداد بهتر بود توضیح میدادید که آیا با خطایی مواجه می شوید یا ...
بله حق با شماست باید بیشتر توضیح می دادم ولی اول می خواستم ببینم راه حلم درست بوده یا نه (db), که شما فرمودید صحیح است(اگر نیست بفرمایید)
به نظرم db را باید از ApplicationDbContext نیو کرد چون از IdentityDbContext ارث بری کرده

مشکل اصلی اینکه اصلا OrderByDescending رو نمی شناسه.
کد:

ApplicationDbContext db = new ApplicationDbContext();
var _post = db.Posts.OrderByDescending(r => r.CreateDate);


در این کد OrderByDescending و بعضی دیگر مثل Where را نمی شناسه.

این کد قبل(قبل از نصب Identity )

Context db = new Context();
var _post = db.Posts.OrderByDescending(r => r.CreateDate);

در این جا کاملا می شناسه مشکلی نبود...

بازهم اگر موضوعی هست بگید توضیح بدم
سپاس.

hakim22
یک شنبه 27 مهر 1393, 08:43 صبح
1- کلاسی که باید new کنید همان ApplicationDbContext هست. البته معمولا این کلاس رو به نام دیتابیس خود پروژه تغییر نام میدهند تا همخوانی بهتری داشته باشد

2- متدهای LINQ از نوع Extended هستند. این متدها به همه ی اشیایی که از اینترفیس IEnumerable ارث بری کرده باشند می چسبند و گزینه هایی مثل Order و Where و ... را به آنها اضافه می کنند. (اگر دقت کنید در لیست دستورات وقتی Ctrl+Space را می زنید آیکون متدهای Linq علامت خاصی دارد). برای استفاده ز متدهای LINQ مطمئن شوید که NameSpace آنها را در Using کلاس قرار داده اید :


using System.Linq;

HOSSEINONLINE7
یک شنبه 27 مهر 1393, 16:50 عصر
سلام دوستان اصلا باورم نمیشه الان بالاخره بعد از حدود 1 ماهی تلاش های فراوان تونستم از Identity 2 استفاده کنم و بین تمام جداول پروژم و جدول AspNetUsers ارتباط برقرار کنم و حتی Migration هم فعاله :لبخند:

همچنین بدون هیچ خطا و مشکلی اطلاعات در db ثبت کنم و ثبت نام کنم و هیچ ناسازگاری بین جداول خودم و Identity نیست :لبخند:

امروز کلا از صبح داشتم راه و روش های مختلف را امتحان میکردم تا بالاخره با کمک راهنمایی دوستان در همین تاپیک موفق شدم :لبخند: دستتون درد نکنه :تشویق:

البته چند روز پیش آقای نجفی پور راهنمایی هایی بهم کردن ولی دوباره به مشکل برخوردم و وقتی اطلاعات ثبت میکردم و ثبت نام میکردم خطا میداد و ناسازگاری بود. Migration هم درست کار نمیکرد ...

بهزاد علی محمدزاده
دوشنبه 28 مهر 1393, 08:59 صبح
دوستانی که با ASP.NET Identity مشکل دارند. کتاب Pro ASP.NET MVC 5 Platform دو فصل رو به تشریح Identity پرداخته , متنش هم روان هست. این مباحث چون ضروری هست و اولویت یادگیریش بسیار بالاست باید حتما مطالعه اش کنید و نمیشه از کنارش عبور کرد. این دو فصل و یا پرینت بگیری یا به هر روش دیگه ایی که برای مطالعه متن ها راحت هستید , و بخونید و یکبار این زحمت و بکشید و یادش بگیرید.
توصیه می کنم به دوستانی که با الگوهای طراحی و معماری های چند لایه آشنا نیستند. در همون پروژه وب پوشه هایی رو ایجاد کنند برای لایه بندی. چون فرضا شما بخشی از مدیریت پروژه رو انتقال میدی به یه لایه جدید, وقتی هم به Identity میرسی برای انتقالش به لایه دیگه ممکنه با مشکلاتی مواجهه بشید. اونوقت چه کار می کنید ؟ بخشی از پروژه رو در یه لایه مدیریت می کنید و بخشی رو در همون لایه وب ؟ یعنی مدیریت مطالب و انتقال میدین و مدیریت کاربران و خیر ؟! و اگر در بخش مطالب نیاز به دسترسی به کاربران داشتید چه کار می کنید؟

alireza_rashvand
شنبه 06 دی 1393, 16:43 عصر
با سلام دوباره...
با تشکر از همه دوستان

مدتی گرفتار پروژه دیگه ای بودم الان دوباره برگشتم روی ادامه اموختن mvc
تشکر از اقای hakim22 (http://barnamenevis.org/member.php?244339-hakim22) مشکل با اضافه کردن Linq حل شد...
سوال که برام پیش اومده اینکه:
حالا اگر بخواهیم یک پست در دیتابیس ثبت کنیم (با توجه به اینکه در کامنت های قبل عرض شد که
ApplicationUser_Id
اتوماتیک به جدول پست اضافه شد) ریختن USERID یا همان مشخص کردن ثبت کنند این پست به چه صورته!

در اکشن ثبت پست :
1- چگونه id کابر رو بگیریم؟
2- مقدار چگونه درون
ApplicationUser_Id بریزیم؟
(مشکل اینجاست که خود ما همچین فیلدی رو در تعریف پست ایجاد نکردیم و نمی توانیم ان را مساوی با مقداری قرار دهیم).


اگر خوب توضیح ندادم بفرمایید دقیقتر بیان کنم.

helpsos
شنبه 06 دی 1393, 18:16 عصر
1- با دستور
User.Identity.getuserid()
می تونی مقدار id کاربر رو بگیری
2- شما یه فیلد در جدول پست تعریف می کنی که مثلا کلید خارجی هست به شکل زیر:

[ForeignKey("Writer")]
public virtual ApplicationUser ApplicationUser { get;set; }
public string Writer { get; set; }

حالا برای مقدار دهی این فیلد در زمان ثبت اطلاعات میگی

post.Writer = User.Identity.GetUserId();

اگه من درست متوجه شده باشم با همین کارها حل میشه

alireza_rashvand
یک شنبه 28 دی 1393, 21:30 عصر
احسنت به شما... سپاس...