Googleまたはstackoverflowで検索しても解決できない問題があります。
JournalLines と Accounts の 2 つのテーブルがあり、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; }
}
_アカウント:
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");
}
}
私が得ているエラーは次のようなものです:
モデルの生成中に 1 つ以上の検証エラーが検出されました:
tSystem.Data.Entity.Edm.EdmAssociationType: : 多重度は、関係 'JournalLine_Account' のロール 'JournalLine_Account_Target' の参照 > 制約と競合します。>従属ロールのプロパティはすべて null 非許容であるため、プリンシパル ロールの多重度は '1' でなければなりません。
これは私を混乱させます。誰かが問題に光を当ててくれることを願っています。
アップデート
途中で助けてくれた答えに感謝し、キーを削除することで仕事との関係を築きました。次に、重複Account
したアカウントに割り当てると、奇妙な動作が作成されました。JournalLine
結局のところ、依存性注入でリポジトリパターンを使用しているため、これはそれほど奇妙な動作ではありません。私が考えていなかったのは、コンテキストが両方のリポジトリで同じではなかったため、JournalLinesRepository は独自のリポジトリからフェッチしたアカウントを追跡していなかったため、それを新しいエンティティとして挿入するのが賢明だと考えたことです。これは、アイテムの追跡が期待どおりに機能するように、リポジトリに同じコンテキストを挿入することで解決されました。再びあなたの助けに感謝します。