Я пытаюсь создать составной ключ со всеми FK.Для уникальности мне нужно 4 свойства.Я добавил два, но третий FK и четвертый FK выдают ошибки, так как они из той же таблицы, и я не уверен, как это настроить?
Я прочитал много ответов, и я просто невидя как это выписать.Я работаю над веб-приложением ASP.Net MVC с Entity Framework и рассмотрел следующие вопросы:
https://www.entityframeworktutorial.net/code-first/foreignkey-dataannotations-attribute-in-code-first.aspx
https://www.entityframeworktutorial.net/code-first/inverseproperty-dataannotations-attribute-in-code-first.aspx
Определениенесколько внешних ключей для одной и той же таблицы в коде Entity Framework First
код Entity Framework First - два внешних ключа из одной таблицы
https://forums.asp.net/t/2135907.aspx?Multiple+Relationships+Foreign+Keys+Between+Two+Tables+in+Classes+
https://febdev.wordpress.com/2013/01/30/entity-framework-mapping-references-with-composite-keys/
Код Entity Framework First One-One для составного ключа
Одна проблема заключается в том, что я никогда не работал с построителем моделей, поэтому я получил ответс другого сайта были просто ссылки, но это мне не сильно помогло.
public class TradeJournal
{
[Key, Column(Order = 0)]
public int UserID { get; set; }
[ForeignKey("UserID")]
public UserAccount UserAccount { get; set; }
[Key, Column(Order = 1)]
public int AccountNumber { get; set; }
[ForeignKey("AccountNumber")]
public FxAccount FxAccount { get; set; }
[Key, Column(Order = 2)]
[ForeignKey("OpenTime")]
public string OpenTime { get; set; }
public HistoricalTrade Open { get; set; }
[Key, Column(Order = 3)]
[ForeignKey("CloseTime")]
public string CloseTime { get; set; }
public HistoricalTrade Close { get; set; }
}
public class HistoricalTrade
{
[Key, Column(Order = 0)]
public int UserID { get; set; }
[ForeignKey("UserID")]
public UserAccount UserAccount { get; set; }
[Key, Column(Order = 1)]
public int AccountNumber { get; set; }
[ForeignKey("AccountNumber")]
public FxAccount FxAccount { get; set; }
[Key, Column(Order = 2)]
[JsonProperty("openTime")]
public string OpenTime { get; set; }
[Key, Column(Order = 3)]
[JsonProperty("closeTime")]
public string CloseTime { get; set; }
}
При переносе базы данных возникла вышеуказанная ошибка, или «OpenTime не является действительным объектом. (что-то вроде) Ключдолжен быть действительной сущностью с неабстрактным геттером и сеттером.
Мне нужно, чтобы ключом было указано четыре свойства. Спасибо.
Редактировать: я переместил "ForeignKey (" OpenTime") и" CloseTime "над ссылочным свойством, и полная ошибка, о которой я упоминалДля воспроизведения из заголовка:
При генерации модели обнаружены одна или несколько ошибок проверки:
TradeJournal_Close_Target_TradeJournal_Close_Source:: количество свойств в зависимых и основных ролях в ограничении отношенийдолжно быть идентичным.
РЕДАКТИРОВАТЬ: я попробовал свои силы в беглом API, как предложено, и я столкнулся с новой ошибкой: "SqlException: оператор INSERT конфликтовал с ограничением FOREIGN KEY.Это произошло db.SaveChanges();
Моя попытка использовать Fluent API заключается в следующем:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<TradeJournal>()
.HasKey(k => new { k.UserID})
.HasRequired(r => r.User);
modelBuilder.Entity<TradeJournal>()
.HasKey(k => new { k.AccountNumber })
.HasRequired(r => r.Account);
modelBuilder.Entity<TradeJournal>()
.HasKey(k => new { k.OpenTime })
.HasRequired(r => r.Open);
modelBuilder.Entity<TradeJournal>()
.HasKey(k => new { k.CloseTime })
.HasRequired(r => r.Close);
}