Для этого мне нужно отношение «один к одному», допускающее значение NULL, что означает, что либо оба конца имеют значение NULL, либо оба конца не являются нулевыми.
Я смоделировал это следующим образом...
Код: Выделить всё
public class Device {
// Irrelevant properties excluded for clarity
public string? TidId { get; set; }
public virtual Tid? Tid { get; set; }
}
public class Tid {
// Irrelevant properties excluded for clarity
public string? DeviceId { get; set; }
public virtual Device? Device { get; set; }
}
public class AppDbContext : IdentityDbContext {
// Irrelevant code excluded for clarity
protected override void OnModelCreating(ModelBuilder builder) {
base.OnModelCreating(builder);
builder.Entity()
.HasOne()
.WithOne(t => t.Device)
.HasForeignKey(t => t.DeviceId)
.IsRequired(false);
builder.Entity()
.HasOne()
.WithOne(d => d.Tid)
.HasForeignKey(d => d.TidId)
.IsRequired(false);
}
То же самое происходит и наоборот, если я устанавливаю Устройство
То же самое происходит и наоборот, если я устанавливаю Устройство
code> для Tid, то свойство навигации установлено для Tid правильно, а свойство навигации для устройства — нет, поэтому я не вижу, какой TID связан с устройство.
Глядя в базу данных, похоже, что между таблицами созданы две связи по внешнему ключу, и я предполагаю, что устанавливается только одна из них, в зависимости от того, какой объект я обновляю.. .

Кто-нибудь может объяснить, как мне следовало это сделать. Спасибо.
Подробнее здесь: https://stackoverflow.com/questions/775 ... lways-null