我们举例说明我要添加到ApplicationUser
UserImage
类。
在使用MVC和个人身份验证设置ASP.NET Core 2项目后,UserImage
添加如下所示:
public class ApplicationUser : IdentityUser
{
public UserImage UserImage { get; set; }
}
public class UserImage
{
public long Id { get; set; }
public byte[] UserImageBlob { get; set; }
public string UserImageFileName { get; set; }
}
(代码优先迁移部分完成)
我在Controllers / ManageController.cs / Index(IndexViewModel model, IFormFile userPicture = null)
中设置了图像采集
作为IFormFile
喜欢:
var userImage = new UserImage { UserImageBlob = null, UserImageFileName = null };
if (userPicture != null && userPicture.Length > 0)
{
using (var stream = new MemoryStream())
{
await userPicture.CopyToAsync(stream);
userImage.UserImageBlob = stream.ToArray();
if (!string.IsNullOrEmpty(userPicture.FileName))
userImage.UserImageFileName = userPicture.FileName;
}
}
此时我仍然坚持如何记住这个UserImage
到目前为止,我尝试过:
//UserManager way:
user.UserImage = userImage;//user is given from _userManager.GetUserAsync(User)
var result = await _userManager.UpdateAsync(user)
和
//DbContext way:
var cUser = await _context.Users
.Include(i => i.UserImage)
.SingleOrDefaultAsync(m => m.Id == user.Id);
...
cUser.UserImage = userImage;
await TryUpdateModelAsync<ApplicationUser>(cUser, "", i => i.UserImage,/*list of other properties to update*/)
...
await _context.SaveChangesAsync();
它们都始终从其操作返回成功结果,但实际的UserImage
属性永远不会记忆在DB(Sql Server)中。
我想出了如何完成我想做的事
我做错了吗?你的方法怎么样?
答案 0 :(得分:0)
你的课应该是这样的:
public class ApplicationUser : IdentityUser
{
public long UserImageId { get; set; }
public UserImage UserImage { get; set; }
}
public class UserImage
{
public long Id { get; set; }
public byte[] UserImageBlob { get; set; }
public string UserImageFileName { get; set; }
public ApplicationUser ApplicationUser { get; set; }
public string ApplicationUserId { get; set; }
}
这是ef-core中基于约定的一对一关系。您也可以使用流畅的API
执行此操作