У меня проблема с тем, что я просто не могу решить Google или искать в stackoverflow.EF HasOptional WithMany
У меня есть две таблицы JournalLines и Accounts, и я хочу ссылаться на учетную запись в журнале (я ненавижу экономию), но ссылка должна быть необязательной, и у учетной записи shoulnt есть свойство навигации в JournalLine (в идеале).
JournalLine:
public class JournalLine : Entity<int>
{
public int? Account_Id { get; set; }
public string Desc { get; set; }
public decimal Credit { get; set; }
public decimal Debit { get; set; }
public virtual Account Account { get; set; }
}
_account:
public class Account : Entity<int>
{
public string Accid { get; set; }
public string Desc { get; set; }
public int VatcodeId { get; set; }
}
И соответствующие отображения:
public class JournalLineMap : EntityTypeConfiguration<JournalLine>
{
public JournalLineMap()
{
HasKey(k => new { k.Id, k.Account_Id });
Property(k => k.Id)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
ToTable("attJournalLines");
HasEntitySetName("JournalLines");
HasOptional(jl => jl.Account)
.WithMany()
.HasForeignKey(jl => jl.Account_Id);
}
}
public class AccountMap : EntityTypeConfiguration<Account>
{
public AccountMap()
{
ToTable("attAccounts");
HasEntitySetName("Accounts");
}
}
И.М. ошибка получение, как:
Один или несколько ошибок проверки были обнаружены в процессе генерации модели:
tSystem.Data.Entity.Edm.EdmAssociationType:: Кратность конфликты с ссылочной> ограничение в роли «JournalLine_Account_Target» в отношениях 'JournalLine_Account. > Поскольку все свойства в зависимой роли не имеют значения NULL, множественность главной роли должна быть «1».
Это смущает меня, и я надеюсь, что кто-то может пролить свет на проблему.
Update
Спасибо за ответы, это помогло мне на пути, и я получил отношение к работе, вынув ключ. Затем я получил wierd behavoir при назначении Account
на JournalLine
была создана повторяющаяся учетная запись. Как оказалось, это не такое странное поведение, поскольку im использует шаблон репозитория с инъекцией зависимости. Я не думал о том, что контекст не был тем же самым в обоих хранилищах, поэтому JournalLinesRepository не отслеживал учетную запись, которую я выбрал из своего собственного репозитория, и поэтому подумал, что разумно просто вставлять ее в качестве нового объекта. Это было решено путем ввода одного и того же контекста в хранилищах, поэтому отслеживание элементов работает так, как ожидалось. Еще раз спасибо за вашу помощь.
Что такое 'Entity'? Возможно, я устарел на EF - это часть структуры, или это настраиваемый базовый класс, где - это свойство Id? –
STW
Правильно это просто пользовательский базовый класс, который определяет тип столбца Идентификатор. Немного избыточен в некоторых случаях, но полезен в других – Patrik