使用Linq从新的DbContext获取数据

时间:2017-03-07 10:14:38

标签: c# asp.net asp.net-mvc linq dbcontext

我在我的项目中添加了一个新的DbContext:

[DbConfigurationType(typeof(MySqlEFConfiguration))]
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public ApplicationDbContext()
        : base("DefaultConnection")
    {
    }
    public static ApplicationDbContext Create()
    {
        return new ApplicationDbContext();
    }

    protected override void OnModelCreating(System.Data.Entity.DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);
        modelBuilder.Entity<ApplicationUser>().ToTable("myapp_users");
        modelBuilder.Entity<IdentityRole>().ToTable("myapp_roles");
        modelBuilder.Entity<IdentityUserRole>().ToTable("myapp_userroles");
        modelBuilder.Entity<IdentityUserClaim>().ToTable("myapp_userclaims");
        modelBuilder.Entity<IdentityUserLogin>().ToTable("myapp_userlogins");
    }
}

[DbConfigurationType(typeof(MySqlEFConfiguration))]
public class MyDbContext : DbContext
{
    public MyDbContext()
        : base("TestConnection")
    {
    }
    public static MyDbContext Create()
    {
        return new MyDbContext();
    }
}

但是当我尝试使用此命令获取一些数据时:

MyDbContext myContext = new MyDbContext();

var products = (from p in myContext.Products
                select p).ToList();

我有这个错误:

'MyDbContext' does not contain a definition for 'Products' and no extension method 'Products' accepting a first argument of type 'MyDbContext' could be found (are you missing a using directive or an assembly reference?)

对此有何帮助?如何从新上下文的数据库中的表中获取数据?

1 个答案:

答案 0 :(得分:1)

如果你是代码优先的,那么每个实体都需要一个模型,它将映射(生成)到数据库表。它通常意味着将根据您的代码生成数据库,尽管您有一个现有数据库但仍然是代码优先的情况。

即。你需要:

public class Product
{
  // ...
}

public class MyDbContext : DbContext
{
  // ...

  public IDbSet<Product> Products { get; set; }
}

如果您确实拥有现有数据库,则可能更容易add an EDMX to your project并从中生成上下文。简单地说,你就整合了#39;使用现有数据库而不是生成数据库。