问题描述
我通过模型类和枚举设计了数据库,我将枚举用作状态值:
public enum MyStatusEnum
{
Requested = 1,Validated = 2,Rejected = 3,Deleted = 4
}
在我的班级中,我的PrimaryKey引用了枚举
public class MyClientStatus
{
public MyStatusEnum MyClientStatusId { get; set; }
// other stuff here ...
}
然后我在枚举和要存储在数据库中的类型(字节)之间进行映射:
modelBuilder.Entity<MyClientStatus>(entity =>
{
//map enum to byte for the primary MyClientStatusId
entity.Property(e => e.MyClientStatusId ).HasConversion<byte>();
entity.Property(e => e.ConsumerStatusId).ValueGeneratedOnAdd();
// seed MyClientStatus values
entity.HasData(Enum.GetValues(typeof(MyStatusEnum)).Cast<MyStatusEnum>().Select(e => new MyClientStatus() { MyClientStatusId = e,Label = e.ToString() }));
});
毕竟,我从dotnet ef migrations add InitialCreate
开始新的迁移,并很好地创建了具有所有依赖项的新.cs文件,例如:
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.CreateTable(
name: "MyClientStatus",columns: table => new
{
MyClientStatusId = table.Column<byte>(nullable: false)
},constraints: table =>
{
table.PrimaryKey("PK_ClientStatus",x => x.MyClientStatusId);
});
//other stuff here ...
}
我更新了数据库,直到现在一切都很好,我的问题是当我更新其他课程或开始新的迁移时它总是检测到新的根据我的枚举和班级而改变?:
public partial class SecondMigration: Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AlterColumn<byte>(
name: "MyClientStatusId",table: "MyClientStatus",nullable: false,oldClrType: typeof(byte),oldType: "tinyint")
.OldAnnotation("SqlServer:Identity","1,1");
}
}
我没有找到为什么它会为每个新迁移准确地检测到这些更改(当然,我无法应用它,因为在我的数据库中,ClientStatus表已经像预期的那样用MyClientStatusId(PK,tinyint,not null)
)
你能用你的想法挑战我吗?
谢谢!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)