簡體   English   中英

如何通過DbContext使用自動創建的表(OnModelCreating(DbModelBuilder))

[英]How to use the auto created table by the DbContext (OnModelCreating(DbModelBuilder))

我在兩個表之間創建了多對多關系

MoviesHashTags由DbContext自動創建。

我希望能夠使用Linq向MoviesHashTags表發送查詢

問題是我沒有任何模型,DbContext沒有提供使用它的任何選擇。 例如這樣的事情:

_db.MoviesHashTags.Select(i =>i.Id).Where(i => i.HashTagId==3)

沒有_db.Database.ExecuteSqlCommand("QUERY")有沒有辦法做到這一點

例:

我想取所有具有HashTagId = 3的ID

表格MoviesHashTags:

在此處輸入圖片說明

-------------------------------------------------------------------------

表電影:

[DataContract]
public class Movie 
{
    [DataMember]
    public long Id { get; set; }
    *
    *
    *
    [DataMember]
    public ICollection<HashTag> HashTagsCollection { get; set; }

public Movie()
{
    HashTagsCollection = new HashSet<HashTag>();
} 

表格HashTag:

[DataContract]
public class HashTag
{
    [DataMember]
    public long HashTagId { get; set; }
    *
    *
    *
    [DataMember]
    public ICollection<Movie> MoviesCollection { get; set; }

    public HashTag()
    {
        MoviesCollection = new HashSet<Movie>();
    }

DbContext:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<Movie>().
    HasMany(c => c.HashTagsCollection).
    WithMany(p => p.MoviesCollection).
    Map(
        m =>
       {
        m.MapLeftKey("Id");
        m.MapRightKey("HashTagId");
        m.ToTable("MoviesHashTags");
        });
 }

解答:感謝@DigitalD

db.Movies.Where(m => m.HashTagsCollection.Any(h => h.HashTagId == hashTag.HashTagId)).Select(m => m.Id);

Linq應該能夠處理以下內容:

var HashTag = _db.HashTags.Find(3); //or whatever method you need to get a single hashtag
var Movies = _db.Movies.Where(m => m.HashTagsCollection.Contains(HashTag))
                 .Select(m => m.Id);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM