Структурный код сущности.

У меня есть два объекта, которые я хочу связать с соотношением 1:1. Пользователь является основным, а UserActivation зависит, но я понятия не имею, как это работает.

public class User
{
    [Key]
    public Guid Id { get; set; }
    public string Name { get; set; }
    public string Lastname { get; set; }
    public string Username { get; set; }

    public virtual UserActivation UserActivation { get; set; }
}

public class UserActivation
{
    [Key]
    public Guid Id { get; set; }
    public Guid UserId { get; set; }
    public bool Active { get; set; }

    public virtual User User { get; set; }
}

Я попытался удалить ключевое слово "virtual", попытался добавить ForeignKey ( "UserId" ) или ForeignKey ( "Пользователь" ), я даже пытался сделать [Key, ForeignKey ( "Пользователь" ) и ни один из они мне помогли. Я хочу сделать отношения 1:1, используя только dataannotations. Любая помощь действительно ценится. Также у моих обоих классов есть свои ПК.

Ответ 1

Внешние ключи не поддерживаются при попытке 1:1:

public class User
{
    [Key]
    public Guid Id { get; set; }
    public string Name { get; set; }
    public string Lastname { get; set; }
    public string Username { get; set; }

    public virtual UserActivation UserActivation { get; set; }
}

public class UserActivation
{
    [Key]
    [ForeignKey("User")]
    public Guid Id { get; set; }
    public bool Active { get; set; }

    public virtual User User { get; set; }
}

Невозможно определить основной конец ассоциации между типами Model.PersonPhoto и Model.Person. Основной конец этой ассоциации должен быть явно сконфигурирован с использованием API свободного взаимодействия или аннотаций данных.

Джули Лерман обсуждает это в своей книге "Первый код":

"Эту проблему легче всего решить с помощью аннотации ForeignKey для зависимого класса, чтобы определить, что он содержит внешний ключ. При настройке отношений" один к одному "Entity Framework требует, чтобы первичный ключ зависимого также был внешним ключом. В нашем случае PersonPhoto является зависимым, и его ключ PersonPhoto.PersonId также должен быть внешним ключом. Добавьте в аннотацию ForeignKey свойство PersonPhoto.PersonId, как показано в примере 4-21. Не забудьте указать навигацию свойство для отношения при добавлении аннотации ForeignKey. "