最初に EF 4.3 コードを使用して m:n 関係を作成および/または保存する際に問題があります
したがって、最初のエンティティPublication
は、他の内部スカラー プロパティと同じように定義されます。
public class Publication : IDataErrorInfo{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int PublicationId { get; set; }
[InverseProperty("Publications")]
public virtual ICollection<Group> Groups { get; set; }
同じ方法で他のクラス:
public class Group : IDataErrorInfo {
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int GroupId { get; set; }
[InverseProperty("Groups")]
public ICollection<Publication> Publications { get; set; }
多くの記事によると、これは問題ないはずです。
私が発生するいくつかの問題があります。初めに:
- 新しいパブリケーションを作成し、それをいくつかのグループでアサートするとします。すべてがデータベースに保存されます。しかし、プログラムを再起動すると、同じ特定のパブリケーションで ICollection が null に設定されています。したがって、グループとの関係に関する情報は削除されました。理由はわかりません:(
- グループ関係を持つ既存のパブリケーション エントリを更新しようとすると、次のテキストで DBUpdateException がスローされます。
リレーションシップの外部キー プロパティを公開しないエンティティの保存中にエラーが発生しました。単一のエンティティを例外のソースとして識別できないため、EntityEntries プロパティは null を返します。保存中の例外の処理は、エンティティ タイプで外部キー プロパティを公開することで簡単に行うことができます
内部例外は同じで、これの内部例外は次のとおりです。
PRIMARY KEY 制約 'PK_ Publicat _3AF5D6A10AD2A005' に違反しています。オブジェクト 'dbo.PublicationGroups' に重複するキーを挿入できません。ステートメントは終了されました。
私は、出版物の新しい価値を次のように主張しています。
var entry = db.Publications.First(a => a.PublicationId == publKey);
entry.Groups = db.Groups.
Where(a => groupKeys.Contains(a.GroupId)).
Select(b => b).
ToList();
ここpublKey
で、 は編集されたエンティティgroupKeys
のキーであり、関連するパブリケーションである GroupId のリストです。
例外を呼び出しdb.SaveContext()
た後、スローされます
このトピックは数多くの記事で取り上げられてきましたが、解決策は見つかりませんでした。すべての例は同じコードを使用していますが、明らかに何かが欠けています。永続データ ストレージとして SQL Ce 4.0 を使用しています。
回答ありがとうございます。昨日から対処していますが、なぜこれが起こるのかはわかりません