代码首次加入表之间没有出现

时间:2015-05-16 21:04:05

标签: sql linq entity-framework linq-to-sql ef-code-first

我有3个表,在用户和类型表之间有一个连接表。

enter image description here

  1. 我首先从数据库导入表作为代码,我的上下文很好,DBset,DBSet和

        modelBuilder.Entity<User>()
            .HasMany(e => e.Type)
            .WithMany(e => e.Users)
            .Map(m => m.ToTable("UserType").MapLeftKey("ut_use_id").MapRightKey("ut_ut_id"));
    
  2. 但是,我不知道如何用linq检索一个包含3列User.name,User.firstname和Type.type_description == 1的表?

  3. 我开始尝试

        using (MyContext db = new MyContext())
        {
            var query = (from u in db.Users....
    

    但是没有表db.UserType?

    感谢您的帮助 干杯

1 个答案:

答案 0 :(得分:1)

这应该会让您的用户(假设导航属性设置正确,导航属性为UserTypes):

using (MyContext db=new MyContext)
{
  var query=db.Users.Where(u=>u.UserTypes.Any(t=>t.type_description==1));
}

如果您需要UserTypes,那么:

using (MyContext db=new MyContext)
{
  var query=db.Users
    .Include(u=>u.UserTypes)
    .Where(u=>u.UserTypes.Any(t=>t.type_description==1));
}

EF将抽象掉&#34; UserTypes&#34;交叉参考表因为您实际上并不需要它。你应该关心的是与用户相关的类型。事实上,有一个交叉引用表可以帮助您了解SQL如何工作的实现细节。

导航属性可以被称为任何东西,并且与交叉引用表的名称相关性很小。如果交叉引用表被称为UserTypesCrossReferences,则仍可以将导航属性称为UserTypes。你碰巧有一个表,默认情况下EF会想要调用导航属性。