我正在尝试在我的数据库中播种用户实体。这User
实体拥有自有财产EmailPermissions
.
当我运行命令时
dotnet ef 迁移添加初始;
我收到错误
无法添加实体类型“User”的种子实体,因为它设置了导航“EmailPermissions”。要种子关系,您需要将相关实体种子添加到“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 = "[email protected] /cdn-cgi/l/email-protection",
UserName = "[email protected] /cdn-cgi/l/email-protection",
PasswordHash = "AQAAAAEAACcQAAAAEIytBES+jqKH9jfuY3wzKyduDZruyHMGE6P+ODe1pSKM7BuGjd3AIe6RGRHrXidRsg==",
SecurityStamp = "WR6VVAGISJYOZQ3W7LGB53EGNXCWB5MS",
ConcurrencyStamp = "c470e139-5880-4002-8844-ed72ba7b4b80",
EmailConfirmed = true
});
}
如果我删除的实例化EmailPermissions
来自构造函数的属性我收到以下错误
“User”类型的实体与“EmailPermissions”类型的实体共享表“AspNetUsers”,但没有该类型的实体具有已标记为“已添加”的相同键值。
我如何通过.HasData
当它拥有自有财产时的方法?