繁体   English   中英

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

[英]Add-Migration error with EF Core Owned type

我有两个从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. 在包管理器控制台中,输入update-database以更新模型快照。
  5. 将上面的代码添加到项目中
  6. ApplicationDbContext ,添加对 ApplicationUsers 的引用:
    public DbSet<ApplicationUser> ApplicationUsers { get; set; }
  7. 在包管理器控制台中添加一个新的迁移:
    add-migration m_001
  8. Ta dah...你应该看到错误信息

编辑:

微软已经确认这是一个错误

同时,您可以使用 fluent 方法进行配置。

  1. 从数据模型中删除[Owned]属性
  2. 通过覆盖ApplicationDbContext上的OnModelCreating方法来配置关系

    protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); modelBuilder.Entity<ApplicationUser>(b => { b.OwnsOne(e => e.Name); b.OwnsOne(e => e.ValidationToken); }); }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM