2

(SOにとっては初めてではありませんが、質問をするのは初めてなので、間違いを許してください。ありがとう。)

ビューを事前に生成するために EF Power Tools を使用しましたが、生成されたクラスの次のメソッドの最後に " " が表示されたので、いつ (または)実際に null が返さreturn null;れるかを調べたいと思いました。GetView

メソッドは次のとおりです。

    /// <summary>
    /// Gets a view corresponding to the specified extent.
    /// </summary>
    /// <param name="extent">The extent.</param>
    /// <returns>The mapping view, or null if the extent is not associated with a mapping view.</returns>
    public override DbMappingView GetView(EntitySetBase extent)
    {
        if (extent == null)
        {
            throw new ArgumentNullException("extent");
        }

        var extentName = extent.EntityContainer.Name + "." + extent.Name;

       //...

       if (extentName == "CodeFirstDatabase.Post")
        {
            return GetView22();
        }

        if (extentName == "CodeFirstDatabase.PostComment")
        {
            return GetView23();
        }

        //...

        return null;
    }

ここに私のモデルがあります:

public class Post
{
    public Post()
    {
        comments = new HashSet<PostComment>();
    }

    //...

    [InverseProperty("post")]
    public virtual ICollection<PostComment> comments { get; set; }

    //...
}

public class PostComment
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    [ForeignKey("comment")]
    public long comment_id { get; set; }
    public Post comment { get; set; }

    [ForeignKey("post")]
    public long post_id { get; set; }
    [InverseProperty("comments")]
    public Post post { get; set; }
}

私の投稿とコメントは同じモデルを持っています (結局のところ、それらはテキストを保存するだけです)。モデルを使用しPostCommentてコメントを別のテーブルにグループ化し、実際の投稿が含まれていないため、コメントに対するクエリが高速になるようにします。

メソッドの " return null;" 行にブレークポイントを設定すると、 " "が取得されます。これは、モデルのコメント外部キーを参照していると思われます。もちろん、EF Power Tool がビューを生成しなかったため、null が返されました。GetViewCodeFirstDatabase.PostComment_commentextentNamePostComment

私の質問は次のとおりです。

  1. EF Power Tools がそのリレーションシップ (またはその他のリレーションシップ) のビューを生成しなかったのはなぜですか?
  2. null を返すと、EF は実行時にビュー自体を生成しますか?
  3. 2 に「はい」の場合、これは最初のクエリの起動時間に影響しますか?

関連する 4 番目の質問としてCodeFirstDatabase、ビュー生成で実際のコンテキスト名と一緒に名前 " " が使用されるのはなぜですか?

私はEntityFramework 6.1.3 btwを使用しています。

4

0 に答える 0