代码之家  ›  专栏  ›  技术社区  ›  crichavin

TypeLoadException方法“Set”没有实现

  •  0
  • crichavin  · 技术社区  · 7 年前

    我在用这个 InventoryMgmtContext 我的申请表上到处都是,我已经好几年没碰过了。但我现在正试图在一个新的测试项目中使用它,并得到这个问题。常规应用程序仍能正常运行,问题就在尝试运行此测试时。所有这些都经过了编译。该错误在测试执行期间的运行时引发。

    我确实看到了 this similar question ,但这些答案都不适用于我,也不适用于我。

    注意:所有这些涉及的项目都在同一个解决方案中。以下是我尝试过的一些事情。

    • 清理和重建项目。
    • 手动删除测试项目的bin文件夹中的文件
    • 确保参考OTIS。领域测试项目中的dll版本是在解决方案生成期间创建的最新版本。

    不知道还有什么

    错误:

    Message: Test method ShopifyAdapterUnitTests.ManageProductTests.GetAndImportUpdatedProductsProducts threw exception: System.TypeLoadException: Method 'Set' in type 'OTIS.Domain.InventoryMgmt.InventoryMgmtContext' from assembly 'OTIS.Domain, Version=1.5.6983.16416, Culture=neutral, PublicKeyToken=null' does not have an implementation.

    我的 IDbContext 接口:

    using System.Data.Entity;
    using System.Data.Entity.Infrastructure;
    
    namespace InciteCore.Domain
    {
        public interface IDbContext
        {
            DbSet<T> Set<T>() where T : class;
            DbEntityEntry<T> Entry<T>(T entity) where T : class;
            int SaveChanges();
            void Dispose();
        }    
    }
    

    部分类 InventoryMgmtContext目录 首先由实体框架DB创建,继承自 System.Data.Entity.DbContext ,它具有 Set 方法:

    namespace OTIS.Domain.InventoryMgmt
    {
        using System;
        using System.Data.Entity;
        using System.Data.Entity.Core.Objects;
        using System.Data.Entity.Infrastructure;
    
        public partial class InventoryMgmtContext : DbContext
        {
            public InventoryMgmtContext()
                : base("name=InventoryMgmtContext")
            {
            }
            <...>
         }
    }
    

    我创建了自己的分部类声明来扩充EFs,以确保它符合 IDbContext 接口,它指定 设置 方法 使用煽动核心。领域 使用系统。数据实体

    namespace OTIS.Domain.InventoryMgmt
    {
        public partial class InventoryMgmtContext : DbContext, IDbContext
        {       
    
        }
    }
    

    我的测试方法,实例化一个新的 InventoryMgmtContext目录 ,这是引发错误的位置。注:我还包括对 设置 方法那么为什么我会出现这个错误呢?此项目确实引用了这两个 OTIS.Domain.dll InciteCore.Domain

    public async Task GetAndImportUpdatedProductsProducts()
    {
        InventoryMgmtContext dbContext = new InventoryMgmtContext();
        var items = dbContext.Set<Item>(); <---- Set Method call!!!
        var repository = new InciteCore.Data.Repository<StoreFront>(dbContext);
        var storeFront = await repository.SearchFor(s => s.Id == 8).FirstOrDefaultAsync();
    
    0 回复  |  直到 7 年前
        1
  •  0
  •   Ahmad Mostafa Awaly    7 年前

    我遇到了同样的问题,因为我使用IDbContext接口而没有实现这个方法 DbSet<T> Set<T>() where T : class; 但是当我在我的上下文基类中实现它时,问题就解决了。在您的例子中,我认为您需要在这个部分类中实现IDbContext方法 InventoryMgmtContext

    推荐文章