我有两个从ApplicationUser
引用的“自有”类型(继承自IdentityUser
):
using System;
using Microsoft.AspNetCore.Identity;
using Microsoft.EntityFrameworkCore;
namespace OwnedEntityTest.Data
{
public class ApplicationUser : IdentityUser
{
public PersonalName Name { get; set; }
public ValidationToken ValidationToken { get; set; }
}
[Owned]
public class PersonalName
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
[Owned]
public class ValidationToken
{
public int ValidationCode { get; set; }
public DateTime ExperiationDateUTC { get; set; }
}
}
当我添加新迁移时,脚手架会抱怨:
不能将表“ IdentityUser”用于实体类型“ ValidationToken”,因为它已用于实体类型“ PersonalName”,并且它们的主键之间没有关系。
这仅仅是一个错误,还是我做错了些什么(或者不了解自有类型)?
是的,您可以重新创建此问题:
ASP.NET Core Web Application
项目模板创建新项目Web Application
Change Authentication
并选择Individual user accounts
update-database
以更新模型快照。ApplicationDbContext
中,将引用添加到ApplicationUsers:public DbSet<ApplicationUser> ApplicationUsers { get; set; }
add-migration m_001
编辑:
Microsoft有confirmed that this is a bug。
答案 0 :(得分:1)
与此同时,您可以使用流利的方法对此进行配置。
[Owned]
属性通过在OnModelCreating
上覆盖ApplicationDbContext
方法来配置关系
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<ApplicationUser>(b =>
{
b.OwnsOne(e => e.Name);
b.OwnsOne(e => e.ValidationToken);
});
}