C# 是否可以在专用字段上定义ValueConversion?
EF Core允许您使用字符串语法指定要在数据库中使用的专用字段:C# 是否可以在专用字段上定义ValueConversion?,c#,entity-framework,asp.net-core,entity-framework-core,C#,Entity Framework,Asp.net Core,Entity Framework Core,EF Core允许您使用字符串语法指定要在数据库中使用的专用字段: modelBuilder.Entity<MyEntity>().Property("myField"); modelBuilder.Entity().Property(“myField”); 您可以为属性指定值转换: modelBuilder .Entity<MyEntity>() .Property(e => e.MyProperty) .HasConversion(
modelBuilder.Entity<MyEntity>().Property("myField");
modelBuilder.Entity().Property(“myField”);
您可以为属性指定值转换:
modelBuilder
.Entity<MyEntity>()
.Property(e => e.MyProperty)
.HasConversion(
v => v.ToInt(),
v => new MyProperty(v));
modelBuilder
.实体()
.Property(e=>e.MyProperty)
.哈斯转换(
v=>v.ToInt(),
v=>newmyproperty(v));
但是可以为私有字段指定值转换吗?这不会编译,可能是因为类型未知:
// won't work
modelBuilder.Entity<MyEntity>().Property("myField")
.HasConversion(
v => v.ToInt(),
v => new MyFieldType(v));
//不起作用
modelBuilder.Entity()属性(“myField”)
.哈斯转换(
v=>v.ToInt(),
v=>newmyfieldtype(v));
也不能使用泛型类型参数,因为这些参数用于EF Core提供的预定义值转换器:
// won't work
modelBuilder.Entity<MyEntity>().Property("myField")
.HasConversion<MyFieldType>(
v => v.ToInt(),
v => new MyFieldType(v));
//不起作用
modelBuilder.Entity()属性(“myField”)
.哈斯转换(
v=>v.ToInt(),
v=>newmyfieldtype(v));
可以在专用字段上定义ValueConversion吗?是的,您只需先定义一个新的ValueConversion:
ValueConverter<MyFieldType, int> myConverter = new ValueConverter<MyFieldType, int>(
v => v.ToInt(),
v => new MyFieldType(v));
modelBuilder.Entity<MyEntity>()
.Property("myField")
.HasConversion(myConverter);
ValueConverter myConverter=新的ValueConverter(
v=>v.ToInt(),
v=>newmyfieldtype(v));
modelBuilder.Entity()
.财产(“myField”)
.HasConversion(myConverter);
EF Core允许您使用字符串语法指定要在数据库中使用的私有字段
它还允许您指定属性类型:
modelBuilder.Entity<MyEntity>()
.Property<MyFieldType>("myField")
// ^
谢谢你,伊万!这样更好
.HasConversion(
v => v.ToInt(),
v => new MyProperty(v));