【发布时间】:2018-06-14 16:58:14
【问题描述】:
我正在尝试在我的数据库中植入一个用户实体。 User 实体有一个 owend 属性 EmailPermissions。
当我运行命令时
dotnet ef 迁移添加 Initial;
我得到了错误
无法添加实体类型“用户”的种子实体,因为它设置了导航“电子邮件权限”。要为关系播种,您需要将相关实体种子添加到“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 方法为用户播种?
【问题讨论】:
标签: c# entity-framework-core ef-core-2.1