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 列 '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 を無効にしようとしていますが、DB から行を削除するのではなく、まだ 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'.