如何正确添加自定义类型的ApplicationUser?

时间:2017-12-31 14:55:24

标签: c# entity-framework asp.net-core

我们举例说明我要添加到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)中。
我想出了如何完成我想做的事 我做错了吗?你的方法怎么样?

1 个答案:

答案 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

执行此操作