我目前正在使用Windows窗体探索实体框架,同时遵循我遇到的official documentation个代码 这会产生编译时错误:

private void dgvCategories_SelectionChanged(object sender, EventArgs e)
        {
            if(this.contextDB != null && this.dgvCategories.CurrentRow !=null)
            {
                var category = this.dgvCategories.CurrentRow.DataBoundItem;
                if(category != null)
                {
                  //  this.contextDB.Entry(category).Collection(a => a.Products).Load();
                    this.contextDB.Entry(category).Collection(a => a.Products).Load();

                }
            }
        }

CS1660无法将lambda表达式转换为类型‘INavigationBase’,因为它不是委托类型.

错误在a=>a产品中.

编辑:这是我的数据库上下文类

 internal class ContextDB : DbContext
    {

        public DbSet<Product> Products { get; set; }
        public DbSet<ProductCategory> categories { get; set; }
        //public DbSet<PurchaseOrder> purchases { get; set; }
        // public DbSet<cate>
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.UseSqlite("Data Source=products.db");
        }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.Entity<ProductCategory>().HasData(
                new ProductCategory { CategoryId = 1, Name = "Cheese" },
                new ProductCategory { CategoryId = 2, Name = "Meat" },
                new ProductCategory { CategoryId = 3, Name = "Fish" },
                new ProductCategory { CategoryId = 4, Name = "Bread" }
                );

            modelBuilder.Entity<Product>().HasData(
  new Product { ProductId = 1, CategoryId = 1, Name = "Cheddar", Price = 50 },
            new Product { ProductId = 10, CategoryId = 1, Name = "Parmesan" },
            new Product { ProductId = 12, CategoryId = 2, Name = "Beef" },
            new Product { ProductId = 13, CategoryId = 2, Name = "Chicken" },
            new Product { ProductId = 17, CategoryId = 2, Name = "Mutton" },
            new Product { ProductId = 21, CategoryId = 3, Name = "Salmon" },
            new Product { ProductId = 22, CategoryId = 3, Name = "Tuna" }
                );
        }
    }

推荐答案

你至少错过了本教程的一个重要部分,DataBoundItem返回object,你需要将其转换为Category才能继续:

var category = (Category)this.dgvCategories.CurrentRow.DataBoundItem;

因此,编译器可以 Select 方法的泛型版本-DbContext.Entry<TEntity>(TEntity),它返回泛型EntityEntry<TEntity>,允许将lambdas传递给像Collection这样的方法.

Csharp相关问答推荐

如何使用FastEndpoints和.NET 8 WebAppliationBuilder进行集成测试?

C#中的包版本控制

无法将blob发送到Azure -缺少HTTP标头异常

如何从泛型方法返回一个可为空的T,其中T:notnull?

解析需要HttpClient和字符串的服务

C++/C#HostFXR通过std::tuple传递参数

将XPS转换为PDF C#

创建临时Collection 最有效的方法是什么?堆栈分配和集合表达式之间的区别?

内部接口和类的DI解析

为具有实体框架后端的Reaction项目 Select 正确的Visual Studio模板

异步实体框架核心查询引发InvalidOperation异常

使用Dapper映射联接查询对象数据到使用SplitOn;

未在数据流块之间传播完成

有没有更好的方法来在CosmosDB上插入非id?

我可以查看我们向应用程序洞察发送了多少数据吗?

有条件地定义预处理器指令常量

如何在GRPC代码First服务的返回类型上使用多态性?

岛屿和框架中的自定义控件库.Navigate-AccessViolationException

项目参考和方法签名问题

无法创建工具窗口(用于VBIDE、VBA的COM加载项扩展)