我有一个作为 PK 的表,但是一旦我尝试运行应用程序,就会在DefaultEditionCreator.csCode
中得到以下异常。
[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:'int'类型的指定字段'k__BackingField'不能用于'string'类型的属性'Article.Id'。只能使用可从属性类型分配的类型的支持字段。
我在运行时遇到同样的错误,Update-Database
并且Add-Migration
.
更新 1
@aaron 非常感谢您的帮助。我已按照您的建议尝试了这些步骤,但在更新和删除记录时出现错误。
例外:
ERROR 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
我试图通过引用Disable SoftDelete for AbpUserRole来禁用 SoftDelete ,但它仍在执行 SoftDelete,而不是从 DB 中删除该行。请找到截图:
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'。