У меня есть сценарий, в котором база данных / таблицы уже существуют, и я не могу их изменить.
Вот модели, которые соответствуют базе данных (в основном):
public class MainTable
{
[Key]
public int MainID { get; set; }
public string SomeData { get; set; }
[ForeignKey("MainID")]
public virtual ExtendedMainTable ExtendedMainTable { get; set; }
}
public class ExtendedMainTable
{
// NOTE: This is the auto-incremented PK in the "real" database table
[Key]
public int ExtendedMainTableID { get; set; }
// NOTE: This column does exist in the ExtendedMainTable table and is a FK in the "real" database table
[Required]
public int MainID { get; set; }
public string SomeData { get; set; }
// NOTE: This was added so devs could not insert a record in the ExtendedMainTable without a MainID
[ForeignKey("MainID")]
[Required]
public virtual MainTable MainTable { get; set; }
}
Мне нужно смоделировать один-к-одному или ноль, где в ExtendedMainTable есть только 1 или 0 записей для любого данного MainID.
Я могу получить это к работе, переместив атрибут «KEY» из ExtendedMainTableID в MainID в классе ExtendedMainTable, НО, который не соответствует реальной базе данных.
Настоящая база данных имеет PK ExtendedMainTableID и FK MainID для ExtendedMainTable.
Когда они запускают SQL UPDATE для ExtendedMainTable, они делают это, но с использованием PK ExtendedMainTableID.
Таким образом, вопрос заключается в следующем.
Как мне заставить это работать в DataAnnotation или Fluent API без добавления «KEY» в ExtendedMainTable.MainID?
Вот список кода, который я пробовал, и все это не работает по разным причинам.
modelBuilder.Entity<MainTable>()
.HasOptional(t => t.ExtendedMainTable)
.WithMany()
.HasForeignKey(t => t.MainID);
modelBuilder.Entity<ExtendedMainTable>()
.HasRequired(t => t.MainTable)
.WithMany()
.HasForeignKey(t => t.MainID);
modelBuilder.Entity<MainTable>()
.HasOptional(t => t.ExtendedMainTable)
.WithOptionalPrincipal(t => t.MainTable);
[ForeignKey("MainID")]
public virtual ExtendedMainTable ExtendedMainTable { get; set; }
[ForeignKey("MainID")]
public virtual MainTable MainTable { get; set; }
[Required, ForeignKey("MainID")]
public virtual MainTable MainTable { get; set; }