Я пытаюсь создать составной ключ со всеми FK. Для уникальности мне нужно 4 свойства. Я добавил два, но третий FK и четвертый FK выдают ошибки, так как они из одной таблицы, и я не знаю, как это настроить?
Я прочитал много ответов, и я просто не вижу, как это написать. Я работаю над веб-приложением ASP.Net MVC с Entity Framework, и я изучил их:
Определение нескольких внешних ключей для Та же таблица в Entity Framework Code First
Сначала код Entity Framework - два внешних ключа из одной таблицы< /а>
https://febdev.wordpress.com/2013/01/30/entity-framework-mapping-references-with-composite-keys/
Отношение Entity Framework First One-to-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);
}
OpenTime
классом? - person ilkerkaran   schedule 02.05.2019[ForeignKey("OpenTime")]
выше строкиpublic HistoricalTrade Close { get; set; }
? и вы можете найти дополнительную информацию об атрибутеForeignKey
entityframeworktutorial .net/код-первый/ - person ilkerkaran   schedule 02.05.2019HistoricalTrade.AccountNumber
(с атрибутом Key) со свойством FK вTradeJournal
. Кстати, на вашем месте я бы точно использовал fluent API. - person ilkerkaran   schedule 02.05.2019HasKey
. Это означает, что preoperty является ключом этого объекта. Переведите в БД, этот столбец является первичным ключом. Если у вас есть составной ключ, вы должны действовать следующим образом;.HasKey(k => new { k.UserID,k.AccountNumber,k.OpenTime, k.CloseTime})
вот как ef будет теперь, когда объект имеет составной ключ - person ilkerkaran   schedule 03.05.2019