【发布时间】:2021-04-17 05:05:06
【问题描述】:
我正在使用 Entity Framework 6.0 开发旧系统,并且有一项新要求是允许用户在已删除的记录上重新使用之前使用过的代码。为此,我添加了一个可为空的 DeletedDate 列和一个结合了代码和删除日期的唯一索引。
为了实现这一点,我在 DataContext 上的 OnModelCreating 方法中添加了以下代码。
modelBuilder.Entity<MyEntity>().HasIndex(e => new {e.Code, e.DeletedDate}).IsUnique();
这很好。但后来我们有一个类似的要求,用户希望重用名称和代码,而不一定要一起使用。所以我想我可以这样做:
modelBuilder.Entity<MyEntity>().HasIndex(e => new {e.Name, e.DeletedDate}).IsUnique();
modelBuilder.Entity<MyEntity>().HasIndex(e => new {e.Code, e.DeletedDate}).IsUnique();
这编译、运行并且没有抛出任何错误,但是当我检查数据库上的结果索引时,第一个总是从其定义中丢失 DeletedDate 列,仅在 Name 上创建一个唯一索引。我可以在 SQL Server 中手动添加 DeletedDate 列,但 EF 根本不会为我这样做。
这是一个错误还是我不能这样做的充分理由?也许更重要的是,有没有办法我可以先在 EF 代码中实现这一点?
我们使用的是 SQL Server 2019。
【问题讨论】:
标签: c# sql-server entity-framework entity-framework-6