Ошибка при создании отношения 1-к-1 между двумя классами в Entity Framework - PullRequest
1 голос
/ 07 мая 2019

Я пытаюсь создать отношения 1-к-1 между двумя классами. 1 пользователь имеет 1 изображение профиля и 1 изображение профиля принадлежит одному пользователю.

код выглядит следующим образом.

public class UserImage
{
    [Key, ForeignKey("User")]
    public int ImageId { get; set; }

    public byte [] ImageContentBytes { get; set; }
    public string FileName { get; set; }
    public string UserId { get; set; }
    public string ImagePath { get; set; }
    [InverseProperty("UserImage")]

    public virtual ApplicationUser User { get; set; }
    }


public class ApplicationUser : IdentityUser
{
    public string FullName { get; set; }
    public string Address { get; set; }
    public string Postcode { get; set; }
    public string RoleId { get; set; }
    public IdentityRole Role { get; set; }
    public int CityId { get; set; }
    public ICollection<User_Has_Jobs_Posted> UserJobs { get; set; }
    public City City { get; set; } // Adding relationship to the user.
    public IList<JobPost> jobPosts { get; set; }

    [InverseProperty("User")]

    public virtual UserImage UserImage { get; set; }
        }

Ошибка говорит:

 Unable to determine the principal end of an association between the types 'FinalWorkFinder.Models.UserImage' and 'FinalWorkFinder.Models.ApplicationUser'. The principal end of this association must be explicitly configured using either the relationship fluent API or data annotations.

1 Ответ

0 голосов
/ 07 мая 2019

В отношении «один к одному» одна запись должна зависеть от другой, а не от обеих записей в зависимости друг от друга.

Таким образом, в вашем случае запись ApplicationUser была бы действительной сама по себе, но UserImage не может.

Это можно исправить с помощью атрибута Required на FK, например, так:

[Required]
public virtual ApplicationUser User { get; set; }

Или вы можете использовать беглый API и сделать что-то вроде:

modelBuilder.Entity<ApplicationUser>()
    .HasOptional(f => f.UserImage)
    .WithRequired(s => s.User);
...