PDA

View Full Version : تغییر نام جداول AspNetUsers و سایر جداول مربوط به کاربر



reza_devel0per
دوشنبه 29 مهر 1398, 00:34 صبح
با سلام
من پروژه ای رو در ASP MVC طراحی و لانچ کرده بودم و الان به دلایلی باید به ASP Core ارتقاعش بدم؛ ولی با توجه به فعال بودن سایت نمیتونم جداول رو درون دیتابیس تغییر بدم.
مشکلی که دارم جداولی مثل AspNetUsers، AspNetRoles و ... هستش.
چون توی دیتابیس قبلیم اسم جداولم چیز دیگه ای مثل : Tb_User ، Tb_Role و.... تعریف شده.
علاوه بر این فیلدها هم متفاوته و خیلی از فیلدها یا نیست یا اگر هست با نام دیگه ای تعریف شده.

الان موقع اجرای احراز هویت با خطای زیر مواجه میشم:
Cannot use table 'Tb_User' for entity type 'Tb_User' since it is being used for entity type 'IdentityUser' and there is no relationship between their primary keys.

حتی در OnModelCreating کد زیر رو تعریف کردم ولی باز با همون خطا مواجه میشه و تاثیری نداره:

modelBuilder.Entity<IdentityUser>().ToTable("Tb_User").Property(p => p.Id).HasColumnName("user_id");

ممنون میشم راهنمایی بفرمایید چطور می تونم این جداول رو به صورت سفارشی تعریف کنم.

baha_ks
پنج شنبه 28 آذر 1398, 20:52 عصر
سلام، یه جستجو درباره Claim انجام بدید

aminaltavista
شنبه 19 بهمن 1398, 19:57 عصر
با سلام
من پروژه ای رو در ASP MVC طراحی و لانچ کرده بودم و الان به دلایلی باید به ASP Core ارتقاعش بدم؛ ولی با توجه به فعال بودن سایت نمیتونم جداول رو درون دیتابیس تغییر بدم.
مشکلی که دارم جداولی مثل AspNetUsers، AspNetRoles و ... هستش.
چون توی دیتابیس قبلیم اسم جداولم چیز دیگه ای مثل : Tb_User ، Tb_Role و.... تعریف شده.
علاوه بر این فیلدها هم متفاوته و خیلی از فیلدها یا نیست یا اگر هست با نام دیگه ای تعریف شده.

الان موقع اجرای احراز هویت با خطای زیر مواجه میشم:
Cannot use table 'Tb_User' for entity type 'Tb_User' since it is being used for entity type 'IdentityUser' and there is no relationship between their primary keys.

حتی در OnModelCreating کد زیر رو تعریف کردم ولی باز با همون خطا مواجه میشه و تاثیری نداره:

modelBuilder.Entity<IdentityUser>().ToTable("Tb_User").Property(p => p.Id).HasColumnName("user_id");

ممنون میشم راهنمایی بفرمایید چطور می تونم این جداول رو به صورت سفارشی تعریف کنم.
سلام عزیز چرا خودت رو اذیت میکنی هیچ وقت زورت رو نده التماس!
برا این جداول دوکار بدون درد سر میتونی بکنی :
اولیش اینه که فیلدهای مورد نیاز خودت رو به جدولی که میخوای append کنی (قاعدش هم همینه چون نمیشه اسکلت رو به هم زد یه چیز فیکس هستن )مثلا این فیلد رو به جدول ApplicationUser که از IdentityUser ارث میبره اضافه کنی

[StringLength(10)]
public string NationalCode { get; set; }
دومیش هم اینه که جداول جدید رو با نام جدید خود بنویسی مثلا برا جداول کاربران به این صورت
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<ApplicationUser>().ToTable("User");
}
پس اول دیتابیس رو تو Identity بساز بعدش .
خیلی از این فیلد ها درسته نام متفاوتی دارن اما یه قاعده رو دارن دقت کن به صورت ستون به ستون برا یک بار با T-Sql داده های خودت رو انتقال بدی از دیتابیس قدیمی به دیتابیس جدید.

INSERT INTO Users (UserName,Name)
SELECT UserName,Name FROM DataBase1.dbo.AspNetUser