我有一个我无法通过谷歌或在 stackoverflow 上搜索解决的问题。
我有两个表 JournalLines 和 Accounts,我想在日记中引用一个帐户(我讨厌经济学),但引用必须是可选的,并且 Account 不应该对 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; }
}
_帐户:
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”中角色“JournalLine_Account_Target”中的引用>约束冲突。>因为从属角色中的所有属性都不可为空,所以 >Principal Role 的多重性必须为“1”。
这让我很困惑,我希望有人能阐明这个问题。
更新
感谢您在路上帮助我的答案,我通过移除钥匙获得了工作关系。然后,在创建重复帐户时,我得到Account
了一个奇怪的行为。JournalLine
事实证明,这并不是那么奇怪的行为,因为我使用了带有依赖注入的存储库模式。我没有想到的是两个存储库中的上下文并不相同,因此 JournalLinesRepository 没有跟踪我从自己的存储库中获取的帐户,因此认为将其作为新实体插入是明智的。这是通过在存储库中注入相同的上下文来解决的,因此项目跟踪可以按预期工作。再次感谢您的帮助。