【问题标题】:How to use the auto created table by the DbContext (OnModelCreating(DbModelBuilder))如何使用 DbContext 自动创建的表 (OnModelCreating(DbModelBuilder))
【发布时间】:2012-11-22 03:05:27
【问题描述】:

我在两个表之间创建了多对多关系

MoviesHashTags 表是由 DbContext 自动创建的。

我希望能够使用 Linq 向 MoviesHashTags 表发送查询

问题是我没有它的任何模型,并且 DbContext 没有给我任何使用它的选项。例如类似的东西:

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

没有_db.Database.ExecuteSqlCommand("QUERY")有没有办法做到这一点

示例:

我想获取所有 HashTagId=3 的 Id

TABLE MoviesHashTags:

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

桌面电影:

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

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

TABLE 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 =&gt; m.HashTagsCollection.Any(h =&gt; h.HashTagId == hashTag.HashTagId)).Select(m =&gt; m.Id);

【问题讨论】:

  • 如果您尝试在“OnModelCreating”中手动映射它,就像您对实体“电影”所做的那样,它会给您带来任何错误吗?
  • 我不明白你的问题...

标签: c# asp.net-mvc entity-framework ef-code-first


【解决方案1】:

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);

【讨论】:

  • 感谢您的指导!我写了我在主要问题中使用的内容。谢谢!
  • @Ofear 您可以跳过一个步骤,然后将值直接放在hashTag.HashTagId 的位置,如下所示:db.Movies.Where(m =&gt; m.HashTagsCollection.Any(h =&gt; h.HashTagId == 3)).Select(m =&gt; m.Id);
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-16
  • 1970-01-01
  • 2019-04-26
相关资源
最近更新 更多