使用枚举器进行映射

时间:2015-12-30 17:17:10

标签: c# entity-framework

我有一个包含一列char(2)的表

CREATE TABLE COMPANY (
    EMP_ID            INTEGER NOT NULL,
    EMP_TYPE          CHAR(2) NOT NULL,
    EMP_NM            VARCHAR(35) NOT NULL
);

使用Entity Framework,我想用枚举映射实体。

public class Company
{
    public Company ()
    {
        Id = null;
        Type = Enums.EnumType.TipoCompany.Matriz;
        Name = string.Empty;
    }

    public int? Id{ get; set; }
    public string Name{ get; set; }
    public Enums.EnumType.TipoCompany TipoCompany { get; set; }
}

public class CompanyMap : EntityTypeConfiguration<Company>
{
    public CompanyMap()
    {
        ToTable("COMPANY");

        HasKey(t => new { t.Id});

        Property(t => t.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None).HasColumnName("EMP_ID");

        Property(t => t.Name)
            .IsRequired()
            .HasMaxLength(35)
            .HasColumnType("Varchar")
            .HasColumnName("EMP_NM");

        Property(t => t.TypeCompany)
          .IsRequired()
          .HasColumnType("Varchar")
          .HasColumnName("EMP_TYPE");
    }
}

public class EnumTypeCompany
{
    public enum TypeCompany
    {
        [Description("Matriz")]
        Matriz = 01,
        [Description("Filial")]
        Filial = 02,
    }
}

我收到了错误:

Contexto.Type[Nullable=False,DefaultValue=]' of member 'TypoCompany' in type 'Contexto.Company' is not compatible with 'FirebirdClient.varchar

如何将varchar转换为枚举???

2 个答案:

答案 0 :(得分:0)

如果对EMP_TYPE字段使用int而不是varchar,则应解决问题。 当您从数据库获取数据时,int字段将自动转换为您的枚举。

<强>更新

rvprop

答案 1 :(得分:0)

在c#中,您不能拥有enum:string,只有intbyte等。您可以做的是制作“假”枚举:

public static class FakeEnum
{
  public static readonly OptionOne = "blabla";
  public static readonly OptionTwo = "random";
}

字符串值将是数据库中EMP_TYPE字段的值。 你可以使用它,就像它是一个字符串的枚举一样,例如在支票中:

Company company = db.Companies.First();
if(company.Type == FakeEnum.OptionOne) //company.Type is really "blabla" in db
  DoStuff();