0

エンティティコードの最初の1対多のデー​​タベースの実装に関する基本的な質問があります。私はこのような2つのモデル、記事とコメントを持っています:

public class Article
    {
    public int Id { get; set; }

    public virtual ICollection<Comment> Comments { get; set; }
....

 public class Comment
{
    public int Id { get; set; }

    public virtual Article CommentForArticle { get; set; }

    public DateTime TimeStamp { get; set; 
....

コメントをDbに追加しようとすると(Comment.CommentForArticleにArticleが含まれています)、コメントはデータベースに追加されますが、Articleにはコメントのコレクションにコメントが含まれていません。

しかし、コメントを作成して記事に追加すると、すべて正常に機能します。データベースにコメントを追加する必要はありませんでした。自動的に追加されます(私は推測します)。

これを実装しようとすると問題が発生しました(次のようなエラー:多重度制約に違反しました)ので、私の質問は、これを今正しく実行しているのか、なぜこの方法でコメントを追加するのではなく、Dbにコメントを追加する必要があるのか​​ということです。コメントを含む記事。また、EntityFrameworkが1対多および多対多の関係でどのように機能するかをよりよく理解するのに役立つリンクを共有できますか。

ありがとう、ギャレット

4

1 に答える 1

1

「持っている」関係がある場合は、所有者のコレクションに新しいアイテムを追加したいと思います。あなたの場合、Article Commentsなので、article.Commentsに新しいコメントを追加します。

継承以外の「is」関係も可能です。ArticleTypeエンティティとプロパティがあるとしますarticle.ArticleType。この場合、プロパティを設定したいと思います。ナビゲーションプロパティもArticleType必要ありません。Articles

「純粋な」多対多の場合(つまり、結合テーブルが独自のエンティティタイプとしてマップされていない場合)、所有者のコレクションにアイテムを追加する以外に方法はありません。

問題が発生した後、なぜ問題が発生したのかは明らかではありません。両方のアプローチを混ぜたからですか?(データベースにコメントを追加し、記事に同じコメントを追加します)。

参考までに:素晴らしいシリーズの記事がここから始まります。より複雑なシナリオに焦点を当てていますが、通常のケースへの参照を見つけるのは難しくありません。

于 2012-04-24T20:28:24.523 に答える