Возникли проблемы при определении «Зависимые и основные роли в ограничении отношений должны быть идентичны» отношения один к одному - PullRequest
2 голосов
/ 02 мая 2019

Я пытаюсь создать составной ключ со всеми 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);
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...