Ошибка: "Указанное выражение LINQ содержит ссылки на запросы, связанные с различными контекстами".
Я использую NopCommerce и создаю плагин, используя этот учебник: Плагин с доступом к данным
Но когда я запускаю приложение, я получаю следующую ошибку:
Msgstr "Указанное выражение LINQ содержит ссылки на запросы, связанные с различными контекстами".
Класс DependencyRegistrar:
public class LookDependencyRegistrar : IDependencyRegistrar
{
private const string CONTEXT_NAME = "nop_object_context_look";
public virtual void Register(ContainerBuilder builder, ITypeFinder typeFinder)
{
//data layer
var dataSettingsManager = new DataSettingsManager();
var dataProviderSettings = dataSettingsManager.LoadSettings();
if (dataProviderSettings != null && dataProviderSettings.IsValid())
{
//register named context
builder.Register<IDbContext>(c => new LookObjectContext(dataProviderSettings.DataConnectionString))
.Named<IDbContext>("nop_object_context_Look")
.InstancePerHttpRequest();
builder.Register<IDbContext>(c => new Look_Product_MappingObjectContext(dataProviderSettings.DataConnectionString))
.Named<IDbContext>("nop_object_context_Look_Product")
.InstancePerHttpRequest();
builder.Register<LookObjectContext>(c => new LookObjectContext(dataProviderSettings.DataConnectionString))
.InstancePerHttpRequest();
builder.Register<Look_Product_MappingObjectContext>(c => new Look_Product_MappingObjectContext(dataProviderSettings.DataConnectionString))
.InstancePerHttpRequest();
}
else
{
//register named context
builder.Register<IDbContext>(c => new LookObjectContext(c.Resolve<DataSettings>().DataConnectionString))
.Named<IDbContext>("nop_object_context_Look")
.InstancePerHttpRequest();
builder.Register<IDbContext>(c => new Look_Product_MappingObjectContext(dataProviderSettings.DataConnectionString))
.Named<IDbContext>("nop_object_context_Look_Product")
.InstancePerHttpRequest();
builder.Register<LookObjectContext>(c => new LookObjectContext(c.Resolve<DataSettings>().DataConnectionString))
.InstancePerHttpRequest();
builder.Register<Look_Product_MappingObjectContext>(c => new Look_Product_MappingObjectContext(c.Resolve<DataSettings>().DataConnectionString))
.InstancePerHttpRequest();
}
//override required repository with our custom context
builder.RegisterType<EfRepository<Look>>()
.As<IRepository<Look>>()
.WithParameter(ResolvedParameter.ForNamed<IDbContext>("nop_object_context_Look"))
.InstancePerHttpRequest();
builder.RegisterType<EfRepository<Look_Product_Mapping>>()
.As<IRepository<Look_Product_Mapping>>()
.WithParameter(ResolvedParameter.ForNamed<IDbContext>("nop_object_context_Look_Product"))
.InstancePerHttpRequest();
//Register services
builder.RegisterType<LookService>().As<ILookService>();
}
public int Order
{
get { return 0; }
}
}
Как я могу решить эту проблему?
1 ответ
Решение
Я думаю, это потому, что ваши сущности, которые вы создали в плагине, содержат отношение между сущностью Nop.Core, такой как Product.
Entity Framework не поддерживает межпроектные отношения. Вы должны удалить сущность Nop.Core, например (свойство Product), из вашей сущности и использовать взамен ProductId int.