Я использую этот InventoryMgmtContext
повсюду в своем приложении, и я не прикасался к нему годами. Но сейчас я пытаюсь использовать его в новом тестовом проекте и получаю эту проблему. Обычное приложение по-прежнему работает нормально, проблема возникает только при попытке запустить этот тест. И все это проходит компиляцию. Ошибка возникает во время выполнения во время выполнения теста.
Я видел похожий вопрос, но ни один из ответов подал заявку или работал на меня.
Обратите внимание, что все эти вовлеченные проекты находятся в одном и том же решении. Вот несколько вещей, которые я пробовал.
- Очистка и восстановление проекта.
- Удаление файлов вручную в папке bin моего тестового проекта
- Убедитесь, что указанная версия OTIS.Domain.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
, созданный Entity Framework DB First, который наследуется от 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")
{
}
<...>
}
}
Я создал собственное частичное объявление класса, чтобы дополнить EF и убедиться, что оно соответствует интерфейсу IDbContext
, в котором указан метод Set
. используя InciteCore.Domain; используя System.Data.Entity;
namespace OTIS.Domain.InventoryMgmt
{
public partial class InventoryMgmtContext : DbContext, IDbContext
{
}
}
Мой тестовый метод, создающий новый экземпляр InventoryMgmtContext
, в котором выдается ошибка. Обратите внимание, я также включаю вызов метода Set
!!! Так почему я могу получить эту ошибку? В этом проекте есть ссылки как на 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();
GetAndImportUpdatedProductsProducts()
и почему он усечен? В вопросе также есть некоторый код, неправильно отформатированный как таковой. Надеюсь, вы знаете, как создать минимальный, полный и проверяемый пример. Дайте мне знать, если вы отредактируете, чтобы я мог продолжить работу над решением. - person Marc.2377   schedule 01.03.2019