Как настроить множественные отношения в свободном API, используя код сначала? - PullRequest
0 голосов
/ 02 ноября 2018

Я получаю следующее исключение при выполнении кода

Объект типа «System.Collections.Generic.HashSet`1 [[SolutionName.ProjectName.Contract, SolutionName.ProjectName, версия = 1.0.0.0, культура = нейтральная, PublicKeyToken = null]] 'нельзя установить или удалить из значения свойство EntityReference типа 'SolutionName.ProjectName.Contract'.

У меня есть две таблицы Таблица контрактов и Таблица клиентов

public partial class Contract
{
    public int ContractId { get; set; }
    public System.Guid Guid { get; set; }
    //nav props
    public virtual Client Client { get; set; }
}
public partial class Client
{
public int Id { get; set; }
public System.Guid Guid { get; set; }
public String ClientName { get; set; }
public Nullable<int> Contract1Id { get; set; } //foreign key pointing to ContractId
public Nullable<int> Contract2Id { get; set; } //foreign key pointing to ContractId
//nav props
public virtual ICollection<Contract> Contracts { get; set; }
public virtual Contract Contract1 { get; set; }
public virtual Contract Contract2 { get; set; }
}

Таким образом, у нас есть 3 навигационных свойства для контракта из клиентской таблицы. Контракт1 и контракт2 из клиентской таблицы будут содержать по одной строке. Но я собираюсь отобразить несколько контрактов в коллекции контрактов. Я попробовал этот, используя следующий свободный код API:

modelBuilder.Entity<Client>()
                    .HasOptional(c => c.Contracts)
                    .WithMany()
                    .HasForeignKey(b => b.Contract1Id);

                modelBuilder.Entity<Client>()
                   .HasRequired(c => c.Contracts)
                   .WithMany()
                   .HasForeignKey(b => b.Contract2Id);

Я не могу правильно настроить свободный API для моего сценария. Пожалуйста, дайте несколько советов

1 Ответ

0 голосов
/ 05 ноября 2018

Здесь у меня много контрактов с одним клиентом. Другими словами, у клиента может быть много контрактов с clientId как FK в контрактах. Поэтому следующий простой свободный API-код сработал для меня.

modelBuilder.Entity<Client>()
                    .HasOptional(c => c.Contracts)
                    .WithMany()
                    .HasForeignKey(b => b.Contract1Id);

        modelBuilder.Entity<Client>()
                   .HasRequired(c => c.Contracts)
                   .WithMany()
                   .HasForeignKey(b => b.Contract2Id);

        modelBuilder.Entity<Client>()
                    .HasMany(c => c.Contracts)
                    .WithRequired()
                    .HasForeignKey(a => a.ClientId);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...