我有一个奇怪的实体框架迁移案例和数据库生成的guid列。
public class ErrorLogs
{
public Guid ErrorLogsId { get; set; }
public Int64 Sequence { get; set; }
}
这是具有两个标识列的类。一个是guid,另一个是序列。但是,我已根据OnModelCreating
方法中的流畅配置配置了实体框架。
我在这里定义了主要的约定。如
builder.Properties().Where(x => x.Name == x.DeclaringType + "Id").Configure(config =>
{
config.IsKey().HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
});
builder.Properties().Where(x => x.Name == "Sequence" && x.PropertyType == typeof(Int64)).Configure(x =>
{
x.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
});
现在有趣的是。我生成迁移时。 int列显示其标识。但迁移文件在Guid
列上没有标识选项。
但是对于我在OnModelCreating
方法中提到的约定,它应该在Guid
列上生成带有identity参数的迁移文件。可以告诉我任何人为什么会这样吗?
还有一点需要注意。如果我使用EntityTypeConfiguration<ErrorLogs>
并将其作为
builder.Configurations.Add(new ErrorLogsMappingMap());
然后它也能够为guid创建标识列。但不是在全球流畅的实体配置惯例的情况下。
迁移文件生成为:
CreateTable(
"REMS.ErrorLogs",
c => new
{
ErrorLogsId = c.Guid(nullable: false),
Sequence = c.Long(nullable: false, identity: true)
})
.PrimaryKey(t => t.ErrorLogsId);
但实际上文件中应该是ErrorLogsId = c.Guid(nullable: false,identity:true),