无法使用EntityFramework添加FK

时间:2018-09-13 09:18:36

标签: c# entity-framework asp.net-core

我正在通过ASP.NET Core学习Entity Framework,并且试图在我的FK表中添加UserDetails。这些是模型:

public class User
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }

    public virtual UserDetails UserDetail { get; set; }
}

public class UserDetails
{
    public string UserId { get; set; }
    public string Biography { get; set; }
    public string Country { get; set; }
    public Uri FacebookLink { get; set; }
    public Uri TwitterLink { get; set; }
    public Uri SkypeLink { get; set; }

    public virtual User UserKey { get; set; }
}

UserMaster表,其中包含应用程序中的所有注册用户(我使用的是AspNetCore.Identity)。

实际上,我想将必须绑定FK的{​​{1}}的属性UserId作为Id添加。因此,在User类中,我执行了以下操作:

ApplicationContext

我覆盖了public class DemoAppContext : IdentityDbContext<ApplicationUser> { public DemoAppContext(DbContextOptions<DemoAppContext> options) : base(options) { } protected override void OnModelCreating(ModelBuilder builder) { builder.Entity<UserDetails>(entity => { entity.Property(e => e.Biography).HasMaxLength(150); entity.Property(e => e.Country).HasMaxLength(10); entity.HasOne(d => d.UserKey) .WithOne(p => p.UserDetail) .HasForeignKey(d => d.???; <- problem here }); } public DbSet<User> Users { get; set; } public DbSet<UserDetails> UserDetails { get; set; } } ,并使用了为OnModelCreating表定义的ModelBuilder的一些属性UserDetails。在MaxLength的最后一行中,我尝试分配builder.Entity<UserDetails>与包含对象FK的{​​{1}}建立关系。该关系为HasOne => UserKey,因此我使用了User并分配了1 to 1,其中包含WithOne对象。

最后,我使用了UserDetail,但是当我键入UserDetails时,编译器没有显示任何属性。

我做错了什么?也许我把事情复杂化了?

对于任何错误,我们深表歉意。

1 个答案:

答案 0 :(得分:1)

您可以尝试以下方法吗:

        entity.HasOne(d => d.UserKey)
                      .WithOne(p => p.UserDetail)
                      .HasForeignKey<User>(b => b.Id);

public class UserDetails
{
    [ForeignKey(nameof(UserKey))]
    public string UserId { get; set; }
    public string Biography { get; set; }
    public string Country { get; set; }
    public Uri FacebookLink { get; set; }
    public Uri TwitterLink { get; set; }
    public Uri SkypeLink { get; set; }

    public virtual User UserKey { get; set; }
}