如何使用Entity Framework 4.1"仅代码"流畅的API映射char属性?

dom*_*mer 44 entity-framework fluent-interface char ef4-code-only

我有一个具有char属性的对象:

public class Product
{
    public char Code
    {
        get;
        set;
    }
}
Run Code Online (Sandbox Code Playgroud)

实体框架似乎无法映射字符(当我从模型对象创建数据库模式时,数据库中缺少此字段).无论如何我可以使用流畅的API映射char(例如字符串)吗?我不想更改模型对象,因为它们是遗留共享库的一部分.

Lad*_*nka 71

Char实体框架是无效的原始类型=实体框架不映射它.如果您检查CSDL参考,您将看到有效类型的列表(char不在其中).

数据库char(1)被翻译为string(SQL到CSDL的翻译).Char被描述为具有固定长度1的非unicode字符串.

唯一丑陋的选择是使用字符串的第二个映射属性,您的char非映射属性将仅使用string[0]该属性.这只是EF中一些简单类型映射或转换器丢失的另一个例子.


jk7*_*jk7 29

在Fluent API中,您可以使用HasColumnType方法指定数据库列数据类型,如下所示:

modelBuilder.Entity<Product>()   
.Property(p => p.Code)   
.HasColumnType("char");
Run Code Online (Sandbox Code Playgroud)

据安德烈阿特斯答案在这里,HasColumnType在EF4.1可用.

对于那些使用Data Annotations的人来说,ColumnAttribute可以完成同样的事情.

[Column(TypeName="char")]
public string Code { get; set; }
Run Code Online (Sandbox Code Playgroud)

  • 如果你想要一个`char`,添加属性`[StringLength(1,MinimumLength = 1)]`. (4认同)