Невозможно добавить FK с помощью EntityFramework - PullRequest
0 голосов
/ 13 сентября 2018

Я учу 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 свойство 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, создавая связь с HasOne => UserKey, которая содержит объект User. Это соотношение 1 to 1, поэтому я использовал WithOne и присвоил UserDetail, который содержит объект UserDetails.

В конце я использовал HasForeignKey, но когда я набираю d., компилятор не показывает никаких свойств.

Что я сделал не так? Может быть, я слишком усложнил вещи?

Извините за любые ошибки, и заранее спасибо за любые объяснения.

Ответы [ 2 ]

0 голосов
/ 13 сентября 2018

Будет работать следующий код:

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<UserDetails>(x => x.UserId);  //???; < -problem here
});

enter image description here

0 голосов
/ 13 сентября 2018

Можете ли вы попробовать это:

        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; }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...