C# 是否可以在专用字段上定义ValueConversion?

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(

EF Core允许您使用字符串语法指定要在数据库中使用的专用字段:

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));