我正在尝试在我的数据库中播种用户实体。该User
实体有一个 owend 属性EmailPermissions
。
当我运行命令时
dotnet ef 迁移添加初始;
我得到错误
无法添加实体类型“用户”的种子实体,因为它设置了导航“电子邮件权限”。要为关系播种,您需要将相关实体种子添加到“EmailPermissions”并指定外键值 {“UserId”}。
但由于EmailPermissions
是一个拥有的实体,我没有给它一个明确的UserId
属性,这意味着我不能在数据库中单独播种它。
实体
public sealed class User : IdentityUser
{
public User()
{
EmailPermissions = new EmailPermissions();
}
/* [..] */
public string TemporaryEmailBeforeChange { get; set; }
public bool IsEmailAwaitingUpdate { get; set; }
public EmailPermissions EmailPermissions { get; set; }
public ICollection<Registeration> Registerations { get; set; }
/* [..] */
}
[Owned]
public class EmailPermissions
{
/* [..] */
public bool Newsletter { get; set; }
public bool PromotionalOffers { get; set; }
public bool PrestationReminders { get; set; }
public bool PrestationOffers { get; set; }
}
播种电话
private void SeedUser(ModelBuilder builder)
{
builder.Entity<User>().HasData(
new User
{
Id = "37846734-172e-4149-8cec-6f43d1eb3f60",
Email = "foo@foo.foo",
UserName = "foo@foo.foo",
PasswordHash = "AQAAAAEAACcQAAAAEIytBES+jqKH9jfuY3wzKyduDZruyHMGE6P+ODe1pSKM7BuGjd3AIe6RGRHrXidRsg==",
SecurityStamp = "WR6VVAGISJYOZQ3W7LGB53EGNXCWB5MS",
ConcurrencyStamp = "c470e139-5880-4002-8844-ed72ba7b4b80",
EmailConfirmed = true
});
}
如果我从构造函数中删除属性的实例化,则会EmailPermissions
收到以下错误
'User' 类型的实体与'EmailPermissions' 类型的实体共享表'AspNetUsers',但没有此类型的实体具有已标记为'Added' 的相同键值。
.HasData
当用户拥有自有财产时,如何通过该方法播种用户?