Entity FrameworkコアでのSQLビューの操作

c# entity-framework entity-framework-core

質問

たとえば、私はそのようなモデルを持っています:

public class Blog
{
    public int BlogId { get; set; }
    public string Url { get; set; }

    public BlogImage BlogImage { get; set; }
}

public class BlogImage
{
    public int BlogImageId { get; set; }
    public byte[] Image { get; set; }
    public string Caption { get; set; }

    public int BlogId { get; set; }
    public Blog Blog { get; set; }
} 

ImageViewビューのUrlImageに戻したいと思います。

SQLビューを作成し定義する必要があるのはどこですか?

受け入れられた回答

Entity Framework Core 2.1では 、Yuriy Nが提案したようにクエリタイプを使用できます。

それらを使用する方法に関するより詳細な記事はここにあります。

記事の例に従った最も直接的なアプローチは次のとおりです。

例えば、出版物を管理するための以下の実体モデルがある。

public class Magazine
{
  public int MagazineId { get; set; }
  public string Name { get; set; }
  public string Publisher { get; set; }
  public List<Article> Articles { get; set; }
}

public class Article
{
  public int ArticleId { get; set; }
  public string Title { get; set; }
  public int MagazineId { get; set; }
  public DateTime PublishDate { get;  set; }
  public Author Author { get; set; }
  public int AuthorId { get; set; }
}
public class Author
{
  public int AuthorId { get; set; }
  public string Name { get; set; }
  public List<Article> Articles { get; set; }
}

2.著者が書いた記事の名前と数を返すように定義されたAuthorArticleCountsというビューがあります。

SELECT
  a.AuthorName,
  Count(r.ArticleId) as ArticleCount
from Authors a
  JOIN Articles r on r.AuthorId = a.AuthorId
GROUP BY a.AuthorName

3.ビューに使用するモデルを作成して作成します。

public class AuthorArticleCount
{
  public string AuthorName { get; private set; }
  public int ArticleCount { get; private set; }
}

4.その後、私のDbContextにDbQueryプロパティを作成して、モデル内のビュー結果を使用します。

public DbQuery<AuthorArticleCount> AuthorArticleCounts{get;set;}

5.最後に、このようにしてビューの結果を簡単に取得できます。

var results=_context.AuthorArticleCounts.ToList();

人気のある回答

ビューは現在Entity Frameworkコアでサポートされていません。 https://github.com/aspnet/EntityFramework/issues/827を参照してください

つまり、エンティティをビューのようにマッピングすることで、EFをビューを使用してトリックすることができます。このアプローチには限界があります。たとえば、移行を使用できない場合は、EFの鍵を手動で特定する必要があります。また、一部のクエリが正しく機能しない場合があります。この最後の部分を回避するために、手動でSQLクエリを書くことができます

context.Images.FromSql("SELECT * FROM dbo.ImageView")


Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ