(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 が返されました。GetView
CodeFirstDatabase.PostComment_comment
extentName
PostComment
私の質問は次のとおりです。
- EF Power Tools がそのリレーションシップ (またはその他のリレーションシップ) のビューを生成しなかったのはなぜですか?
- null を返すと、EF は実行時にビュー自体を生成しますか?
- 2 に「はい」の場合、これは最初のクエリの起動時間に影響しますか?
関連する 4 番目の質問としてCodeFirstDatabase
、ビュー生成で実際のコンテキスト名と一緒に名前 " " が使用されるのはなぜですか?
私はEntityFramework 6.1.3 btwを使用しています。