EF核心拥有类型的添加迁移错误

时间:2019-01-18 01:46:42

标签: c# entity-framework-core

我有两个从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”,并且它们的主键之间没有关系。

这仅仅是一个错误,还是我做错了些什么(或者不了解自有类型)?

是的,您可以重新创建此问题:

  1. ASP.NET Core Web Application项目模板创建新项目
  2. 选择Web Application
  3. 点击Change Authentication并选择Individual user accounts
  4. 在Package Manager控制台中,输入update-database以更新模型快照。
  5. 将上述代码添加到项目中
  6. ApplicationDbContext中,将引用添加到ApplicationUsers:
    public DbSet<ApplicationUser> ApplicationUsers { get; set; }
  7. 在Package Manager控制台中添加新的迁移:
    add-migration m_001
  8. Ta dah ...您应该会看到错误消息

编辑:

Microsoft有confirmed that this is a bug

1 个答案:

答案 0 :(得分:1)

与此同时,您可以使用流利的方法对此进行配置。

  1. 从数据模型中删除[Owned]属性
  2. 通过在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);
        });
    }