从数据库加载自定义 ApplicationUser 对象
Loading custom ApplicationUser object from database
我正在使用 ASP.NET Core 2.0 with Identity 和 Entity Framework。我已将 IdentityUser
class 扩展到下面的 ApplicationUser
中:
namespace TxTools.Data.Features.Shared.Models
{
public class ApplicationUser : IdentityUser
{
public string FirstName { get; set; }
public string LastName { get; set; }
[ForeignKey("PhotoResourceId")]
public BlobResource Photo { get; set; }
}
}
这是我的 BlobResource
:
namespace TxTools.Data.Features.BlobStorage.Models
{
public class BlobResource
{
[Key]
public Guid ResourceId { get; protected set; }
public string Container { get; protected set; }
public string MimeType { get; protected set; }
public string Filename => String.Format("{0}.{1}", ResourceId, MimeTypes.GetExtension(MimeType));
public BlobResource(string container, string mimeType)
{
this.ResourceId = Guid.NewGuid();
this.Container = container;
this.MimeType = mimeType;
}
}
}
Entity Framework 在我将 BlobResource
添加到 ApplicationUser
时保存了 BlobResource
,但我无法让它从数据库加载 BlobResource
。该对象始终为空。我已经尝试了几个 Fluent API 命令来尝试加载它,但是 none 工作。
首先,User
和 BlobResource
class 需要相互引用。您需要确定关系是 one-to-one(一个用户一张照片)、one-to-many(一个用户多张照片,还是许多用户一张照片)或 many-to-many。
Entity Framework描述关系的方式在这里:https://docs.microsoft.com/en-us/ef/core/modeling/relationships
其次,EF 是 lazy-loading,因此当您从数据库加载用户时,您必须告诉它追踪这些关系。假设您有一个扩展 IdentityDbContext
...
的数据库上下文 class
public class MyContext: IdentityDbContext<ApplicationUser>
{
public DbSet<ApplicationUser> Users { get; set; }
public DbSet<BlobResource> BlobResources { get; set; }
}
...您将按如下方式使用 Include
:
var usersWithBlobs = myContext.Users.Include(user => user.Photo);
或给定其 id
的特定用户:
var myUser = myContext.Users.Where(u => u.Id == id).Include(user => user.Photo);
加载描述如下:https://docs.microsoft.com/en-us/ef/core/querying/related-data
我正在使用 ASP.NET Core 2.0 with Identity 和 Entity Framework。我已将 IdentityUser
class 扩展到下面的 ApplicationUser
中:
namespace TxTools.Data.Features.Shared.Models
{
public class ApplicationUser : IdentityUser
{
public string FirstName { get; set; }
public string LastName { get; set; }
[ForeignKey("PhotoResourceId")]
public BlobResource Photo { get; set; }
}
}
这是我的 BlobResource
:
namespace TxTools.Data.Features.BlobStorage.Models
{
public class BlobResource
{
[Key]
public Guid ResourceId { get; protected set; }
public string Container { get; protected set; }
public string MimeType { get; protected set; }
public string Filename => String.Format("{0}.{1}", ResourceId, MimeTypes.GetExtension(MimeType));
public BlobResource(string container, string mimeType)
{
this.ResourceId = Guid.NewGuid();
this.Container = container;
this.MimeType = mimeType;
}
}
}
Entity Framework 在我将 BlobResource
添加到 ApplicationUser
时保存了 BlobResource
,但我无法让它从数据库加载 BlobResource
。该对象始终为空。我已经尝试了几个 Fluent API 命令来尝试加载它,但是 none 工作。
首先,User
和 BlobResource
class 需要相互引用。您需要确定关系是 one-to-one(一个用户一张照片)、one-to-many(一个用户多张照片,还是许多用户一张照片)或 many-to-many。
Entity Framework描述关系的方式在这里:https://docs.microsoft.com/en-us/ef/core/modeling/relationships
其次,EF 是 lazy-loading,因此当您从数据库加载用户时,您必须告诉它追踪这些关系。假设您有一个扩展 IdentityDbContext
...
public class MyContext: IdentityDbContext<ApplicationUser>
{
public DbSet<ApplicationUser> Users { get; set; }
public DbSet<BlobResource> BlobResources { get; set; }
}
...您将按如下方式使用 Include
:
var usersWithBlobs = myContext.Users.Include(user => user.Photo);
或给定其 id
的特定用户:
var myUser = myContext.Users.Where(u => u.Id == id).Include(user => user.Photo);
加载描述如下:https://docs.microsoft.com/en-us/ef/core/querying/related-data