У меня есть таблица с Code
в качестве PK, но я получаю исключение ниже в DefaultEditionCreator.cs при попытке запустить приложение.
[Table("Test")]
public class Test: FullAuditedEntity<string>
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
new public int Id { get; set; }
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
[MaxLength(NVarcharLength14), DataType(DataType.Text)]
public virtual string Code { get; set; }
}
Заявленный репозиторий:
private readonly IRepository<Article, string> _articleRepository;
Исключение:
System.InvalidOperationException: «Указанное поле «k__BackingField» типа «int» не может использоваться для свойства «Article.Id» типа «string». Можно использовать только резервные поля типов, которые можно назначать из типа свойства.
Я получаю ту же ошибку при запуске Update-Database
и Add-Migration
.
Обновление 1
@aaron Большое спасибо за вашу помощь. Я попробовал шаги, предложенные вами, но я получаю сообщение об ошибке при обновлении и удалении записей.
Исключение:
ОШИБКА 2018-02-12 06:13:23,049 [30] Mvc.ExceptionHandling.AbpExceptionFilter — произошла ошибка при обновлении записей. Подробности смотрите во внутреннем исключении. Microsoft.EntityFrameworkCore.DbUpdateException: произошла ошибка при обновлении записей. Подробности смотрите во внутреннем исключении. ---> System.Data.SqlClient.SqlException: невозможно обновить идентификатор столбца «Id».
public async Task UpdateTest()
{
var entity = GetAll().Where(x => x.TestId == "One").FirstOrDefault();
await UpdateAsync(entity);
}
public async Task DeleteTest()
{
await DeleteAsync(x => x.TestId == "One");
}
public class Test : FullAuditedEntity
{
// PK
public string TestId { get; set; }
// Unique constraint
public int TestId2 { get; set; }
}
Обновление 2
Я пытаюсь отключить SoftDelete, обратившись к отключить SoftDelete для AbpUserRole, но он все еще выполняет SoftDelete, не удаляя строку из БД. Пожалуйста, найдите скриншот:
public class TestAppService : MyProjectAppServiceBase, ITestAppService
{
public Task DeleteTest()
{
using (CurrentUnitOfWork.DisableFilter(AbpDataFilters.SoftDelete))
{
return _testRepository.DeleteTest();
}
}
}
MyDBContext.cs:
protected override void CancelDeletionForSoftDelete(EntityEntry entry)
{
if (IsSoftDeleteFilterEnabled)
{
base.CancelDeletionForSoftDelete(entry);
}
}
Решение работает нормально, но оно дает следующее исключение при выполнении тестового примера для создания объекта Test
.
Ошибка SQLite 19: «Ошибка ограничения NOT NULL: Test.Id».