c# - 来自基类的索引数据注释的异常
问题描述
我开始了ASP.net Core
,我正在创建我的模型。
我刚刚创建了两个:一个名为dto
,它将成为我所有数据库模型的基础,如下所示:
public abstract class Dto
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid Id { get; set; }
[Clustered]
public DateTime CreatedAt { get; set; } = DateTime.UtcNow;
public DateTime LastUpdate { set; get; }
}
另一个被调用subscription
,它看起来像这样:
public class Subscription:Dto
{
public string Name { get; set; }
public decimal Price { set; get; }
public string MeliApiKey { get; set; }
public int MaxQueries { get; set; }
public int UsedQueries { get; set; }
}
我在以下配置Fluent API
:
modelBuilder.Entity<Dto.Dto>().Property(x => x.CreatedAt).HasDefaultValueSql("SYSUTCDATETIME()");
modelBuilder.Entity<Dto.Dto>().Property(x => x.LastUpdate).HasComputedColumnSql("SYSUTCDATETIME()");
foreach (var entity in modelBuilder.Model.GetEntityTypes())
{
foreach (var prop in entity.GetProperties())
{
var attr = prop.PropertyInfo?.GetCustomAttribute<ClusteredAttribute>(true);
if (attr != null)
{
var index = entity.AddIndex(prop);
index.IsUnique = true;
index.SqlServer().IsClustered = true;
}
}
}
我只添加了subscription
一个dbset
,因为我不希望 Table Per Hierarchy 继承与dto
.
当我运行 add-migration 时,我收到以下错误:
“索引 {'CreatedAt'} 无法添加到实体类型 'Subscription',因为实体类型 'Dto' 上已存在相同属性的索引”
现在我已经用谷歌搜索了这个错误,但我看不到任何地方如何解决这个问题。
我应该删除dto
该类并向代表我的模型的每个对象添加相同的属性吗?
解决方案
如错误所述,索引已在基类的属性上定义。检查该属性是否在您当前正在处理的实体的同一类型中声明,类似于:
var propertiesToProcess = entity.GetProperties()
.Where( p => entity.ClrType == p.PropertyInfo.DeclaringType );
推荐阅读
- excel - 带有嵌套 For 循环的数组
- javascript - Visual Studio 2019 和 Babel,发布 Build Compile Javascript into ES5
- c - 调试 Linux 进程挂起,它正在运行哪些代码?
- javascript - 如何在 Chrome 扩展程序中使用 javascript 发出 POST 请求?
- mips - MIPS指令模
- go - 如何使用标准库类型
- php - 从一组匹配的 id 中检索数据的最有效方法是什么?
- sql-server - 当前的 Azure 版本是什么(与 SQL Server 相关)
- python - 如何用字典替换字符串中的缺失字符
- php - Laravel:AuthenticatesUsers.php 第 68 行中不存在方法 Illuminate\Http\Request::validate