iT邦幫忙

0

asp net 抓不到自己新增在user的欄位

  • 分享至 

  • xImage

各位大大好:
想請教asp net問題,目前使用visual studio 2022,我有在aspnetusers的資料表新增一個MyID的欄位
註冊的時候確實是可以把資料寫進去
但是在讀的時候就是讀不到MyID的欄位,我只能讀到asp他預設的欄位....
以下是程式碼:
ApplicationUser.cs//我新增的欄位


public class ApplicationUser : IdentityUser
{ 
    public string MyId { get; set; }
}

ApplicationDbContext.cs


public class ApplicationDbContext : IdentityDbContext<IdentityUser>
{ >
    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
        : base(options)
    {
    }

    protected override void OnModelCreating(ModelBuilder builder)
    {
       base.OnModelCreating(builder);
        builder.ApplyConfiguration(new ApplicationUserEntityConfiguration());
    }

    private class ApplicationUserEntityConfiguration : IEntityTypeConfiguration<ApplicationUser>
    {
        public void Configure(EntityTypeBuilder<ApplicationUser> builder)
        {
            builder.Property(u=>u.MyId).HasMaxLength(50);
        }
    }
    public DbSet<ApplicationUser>? ApplicationUsers { get; set; }
    
}

MyControl.cs

public class MyController : Controller
    {
        private readonly ApplicationDbContext _context;
        private readonly ApplicationUser _users;
        public EvidencesController(ApplicationDbContext context)
        {
            _context = context;
        }
        public IActionResult Create()
        {
            
            var curUserId=User.FindFirstValue(ClaimTypes.Name);
             var tmp = _context.Users.Where(u => u.UserName == curUserId).FirstOrDefault();
              
              ViewBag.MyId = tmp.MyId;//這裡會錯誤,找不到MyId,可是欄位明明就有新增阿....
            return View();
        }
 
    }
}

謝謝各位

看更多先前的討論...收起先前的討論...
canrong iT邦新手 2 級 ‧ 2022-07-30 17:36:39 檢舉
把滑鼠移到var tmp那邊看一下你的tmp最終收到的是不是ApplicationUser 的型態
canrong iT邦新手 2 級 ‧ 2022-07-30 17:47:26 檢舉
不過你雖然DBSet有設ApplicationUsers 但是卻是使用Users這應該是回TUser型態沒有錯
canrong iT邦新手 2 級 ‧ 2022-07-30 17:59:47 檢舉
對照了官方文件,你ApplicationDbContext泛型應該是有問題
神威 iT邦研究生 4 級 ‧ 2022-07-30 19:47:35 檢舉
canrong
收到的是IdentityUser型態
canrong iT邦新手 2 級 ‧ 2022-07-30 21:42:32 檢舉
取得型態是IdentityUser是有問題的,因為IdentityUser裡並沒有MyId
ApplicationDbContext泛型錯了<TUser>應該傳入ApplicationUser
https://docs.microsoft.com/zh-tw/dotnet/api/microsoft.aspnetcore.identity.entityframeworkcore.identitydbcontext-1?view=aspnetcore-6.0
該類別裡屬性中的DbSet<TUser> Users會依照你放的TUser去實例
泛型觀念可能需要再釐清一下
神威 iT邦研究生 4 級 ‧ 2022-07-30 22:09:19 檢舉
我當初是使用 ApplicationDbContext : IdentityDbContext<ApplicationUser>但是它執行就會當機......所以我才改成IdentityUser的
神威 iT邦研究生 4 級 ‧ 2022-07-30 22:20:12 檢舉
我已經解決了,program.cs也需要改才行,謝謝
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

1
小魚
iT邦大師 1 級 ‧ 2022-07-30 17:32:33
最佳解答

你讀資料應該是用ApplicationDbContext,
ApplicationDbContext裡面有這個欄位嗎?

神威 iT邦研究生 4 級 ‧ 2022-07-30 19:41:31 檢舉

我ApplicationDbContext的程式碼有放在上面喔
MyId有放裡面

private class ApplicationUserEntityConfiguration : IEntityTypeConfiguration<ApplicationUser>
    {
        public void Configure(EntityTypeBuilder<ApplicationUser> builder)
        {
            builder.Property(u=>u.MyId).HasMaxLength(50);//這裡
        }
    }
    public DbSet<ApplicationUser>? ApplicationUsers { get; set; }

這樣是OK的嗎?還是要用其他方法?

神威 iT邦研究生 4 級 ‧ 2022-07-30 22:20:17 檢舉

我已經解決了,program.cs也需要改才行,謝謝

我要發表回答

立即登入回答