Извините за мой плохой английский, может ли кто-нибудь помочь мне с этой ошибкой, как показано ниже:
Я следил за этим руководством, чтобы создать новое модульное приложение (с именем Payment) на платформе AspnetZero (с именем FastOne).
Во втором контексте DbContext я изменяю соединение по умолчанию для моей второй базы данных и добавляю новое имя объекта BankCode. После добавления-миграции и обновления-базы все работает нормально. Новая база данных была создана с 1 именем таблицы BankCode
Я пошел создать AppService в проекте модуля .Application, как показано ниже:
public class BankCodeAppService : FastOneAppServiceBase, IBankCodeAppService
{
//from PaymentDbContext
private readonly IRepository<BankCode> _repository;
public BankCodeAppService(IRepository<BankCode> repository)
{
_repository = repository;
}
public ListResultDto<BankCodeDto> GetAllBankCodeDto()
{
try
{
var result = _repository.GetAll().ToList();
return new ListResultDto<BankCodeDto>(result.MapTo<List<BankCodeDto>>());
}
catch (Exception ex)
{
throw new NotImplementedException();
}
}
}
Это мой PaymentDbContext
[DefaultDbContext]
[AutoRepositoryTypes(
typeof(IPaymentRepositoryBase<>),
typeof(IPaymentRepositoryBase<,>),
typeof(PaymentRepositoryBase<>),
typeof(PaymentRepositoryBase<,>)
)]
public class PaymentDbContext : FastOneDbContext
{
/* Define an IDbSet for each entity of the application */
public virtual IDbSet<BankCode.BankCode> BankCodes { get; set; }
//TODO: Define an IDbSet for your Entities...
public PaymentDbContext() : base("SecondConn") { }
public PaymentDbContext(string nameOrConnectionString) : base(nameOrConnectionString) { }
public PaymentDbContext(DbConnection connection) : base(connection) { }
}
API был успешно создан, но когда я позвонил ему, он вернул ошибку, как показано ниже:
Тип сущности BankCode не является частью модели для текущего контекста.
Я попытался отладить и понять, что репозиторий FastOneDbContext вместо PaymentDbContext: [Неверный репозиторий при отладке] [2] Я совершенно новичок в AspNetBoilerplate и модуле Zero. Так что может кто-нибудь помочь мне. Благодарить
Обновление: это мой PaymentRepositoryBase
namespace FastOne.EntityFramework.Repositories
{
public class PaymentRepositoryBase<TEntity, TPrimaryKey> : FastOneRepositoryBase<TEntity, TPrimaryKey>
where TEntity : class, IEntity<TPrimaryKey>
{
public PaymentRepositoryBase(IDbContextProvider<PaymentDbContext> dbContextProvider) : base(dbContextProvider) { }
//do not add any method here, add to the class above (since this inherits it)
}
public abstract class PaymentRepositoryBase<TEntity> : PaymentRepositoryBase<TEntity, int>
where TEntity : class, IEntity<int>
{
public PaymentRepositoryBase(IDbContextProvider<PaymentDbContext> dbContextProvider) : base(dbContextProvider) { }
//do not add any method here, add to the class above (since this inherits it)
}
}
Обновление 3. Спасибо за помощь, Аарон, все идет правильно, это новейшая ошибка, я искал некоторые решения, но они не работали. Пожалуйста помоги
Компонент для поддержки сервиса FastOne.EntityFramework.PaymentDbContext не найден.
Обновление 4. Я попытался добавить этот метод в PaymentDataModule:
public override void Initialize()
{
IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly());
}
Это сработало !, я вижу, что _repository получает правильный контекст. но когда я бегу, это вызвало эту ошибку:
System.Data.SqlClient.SqlException: недопустимое имя объекта "dbo.BankCode".
Я понял, что подключение было неправильным. Это был контекст первого контекста
Обновление 5: я обнаружил, что у меня есть 3 конструктора в PaymentDbContext
. Итак, я удалил эти строки:
public PaymentDbContext() : base("LocalPaymentConn") { }
//public PaymentDbContext(string nameOrConnectionString) : base(nameOrConnectionString) { }
//public PaymentDbContext(DbConnection connection) : base(connection) { }
-> Он получил правильную строку подключения. Так круто!! Спасибо Аарону и Тьену за вашу помощь. Спасибо