В Entity Framework внешний ключ представляет связь между двумя объектами, обычно через свойство навигации. Отношения «один к одному» означают, что каждая сущность в одной таблице связана ровно с одной сущностью в другой таблице. Вот несколько методов, которые вы можете использовать для работы с отношениями внешнего ключа «один к одному» в Entity Framework:
- Подход на основе соглашений. По умолчанию Entity Framework предполагает связь «один к одному», когда свойство навигации определено в обеих сущностях и они используют один и тот же первичный ключ. Вы можете использовать такие атрибуты, как
[ForeignKey]и[Required], чтобы явно настроить связь.
Пример:
public class User
{
public int UserId { get; set; }
public string Username { get; set; }
public UserProfile Profile { get; set; }
}
public class UserProfile
{
[Key, ForeignKey("User")]
public int UserId { get; set; }
public string FullName { get; set; }
public User User { get; set; }
}
- Fluent API: вы можете использовать Fluent API для явной настройки отношений «один к одному» с помощью методов
HasOne()иWithOne().
Пример:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<User>()
.HasOne(u => u.Profile)
.WithOne(p => p.User)
.HasForeignKey<UserProfile>(p => p.UserId);
}
- Аннотации к данным: Entity Framework также поддерживает аннотации к данным для настройки связей. Чтобы указать связь, вы можете использовать такие атрибуты, как
[ForeignKey]и[Required].
Пример:
public class User
{
public int UserId { get; set; }
public string Username { get; set; }
[Required]
public UserProfile Profile { get; set; }
}
public class UserProfile
{
[Key, ForeignKey("User")]
public int UserId { get; set; }
public string FullName { get; set; }
public User User { get; set; }
}