我正在通过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; }
}
表User
是Master
表,其中包含应用程序中的所有注册用户(我使用的是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
时,编译器没有显示任何属性。
我做错了什么?也许我把事情复杂化了?
对于任何错误,我们深表歉意。
答案 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; }
}