EF Code First: определите отношения «один ко многим» с разными ключами - PullRequest
1 голос
/ 04 августа 2011

У меня проблемы с определением отношения один к нулю или множества между двумя объектами в EF4.1.

Вот как выглядит моя объектная модель:

public class SubmittedTransaction
{
    public int Batch_ID { get; set; }
    public Int64 Batch_Detail_ID { get; set; }
    public string Company_ID { get; set; }

    public virtual ICollection<SubmittedSplitTransaction> Splits { get; set; }
}

Используя свободный API, вышеуказанный объект имеет составной PK, определенный как Batch_ID и Batch_Detail_ID.

public class SubmittedSplitTransaction
{
    public Int64 Batch_Detail_ID { get; set; }
    public string Company_ID { get; set; }
    public decimal Sales_Amount { get; set; }
    public decimal Revenue_Amount { get; set; }
}

Используя свободный API, вышеуказанный объект в качестве составного ПК определен как Batch_Detail_ID и Company_ID.

Это сопоставлено с существующей базой данных (TPT).

Основная идея здесь заключается в том, что SubmittedTransaction может иметь ноль для множества SubmittedSplitTransaction, связанных с ним. Навигация действительно должна быть только односторонней, от SubmittedTransaction до SubmittedSplitTransaction.

Что требуется в моем классе DBContext (переопределение OnModelCreating) или в моих классах отображения для отложенной загрузки из SubmittedTransaction в SubmittedSplitTransaction?

Любая помощь здесь будет очень ценится !!!

[EDIT]

Я принял ваш совет и внес следующие изменения:

public class SubmittedSplitTransaction
{
    public Int64 Batch_Detail_ID { get; set; }
    public string Company_ID { get; set; }
    public decimal Sales_Amount { get; set; }
    public decimal Revenue_Amount { get; set; }

    public virtual SubmittedTransaction SubmittedTransaction { get; set; }
}

В своем классе DBContext я добавил следующее к переопределению OnModelCreating:

modelBuilder.Entity<SubmittedTransaction>().HasMany(s => s.Splits).WithRequired().Map(m => m.MapKey("Batch_Detail_ID"));

Я, должно быть, что-то здесь упускаю, потому что теперь я получаю следующее исключение:

The specified association foreign key columns 'Batch_Detail_ID' are invalid. The number of columns specified must match the number of primary key columns.

Отправленная транзакция имеет ключ Batch_ID и Batch_Detail_ID. Он может иметь ноль, одну или несколько SubmittedSplitTransactions, который имеет ключ Batch_Detail_ID и Company_ID. Какая конфигурация требуется вместо принятия соглашений о создании отношений между этими двумя объектами, поскольку то, что у меня есть выше, явно неверно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...