实体框架:类型“映射为复杂类型”错误

3

在我的数据库中,我有一张名为“tracking”的表,它包含以下列:

[OrderNumber] [varchar](50) NULL,
[TrackingNumber] [varchar](50) NULL,
[emailaddress] [varchar](100) NULL,
[courier] [varchar](10) NULL

我有一个名为“Tracking”的类,用于表示来自表中的实体:

public class Tracking
{
    public virtual string OrderNumber { get; set; }
    public virtual string TrackingNumber { get; set; }
    public virtual string EmailAddress { get; set; }
    public virtual string Courier { get; set; }
}

在我的数据上下文定义中
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Configurations.Add(new TrackingConfig());
}

internal class TrackingConfig : EntityTypeConfiguration<Tracking>
{
    internal TrackingConfig()
    {
        Property(x => x.OrderNumber);
        Property(x => x.TrackingNumber);
        Property(a => a.EmailAddress).HasColumnName("emailaddress");
        Property(a => a.Courier).HasColumnName("courier");
    }
}

您可以看到,我没有明确将其转换为复杂类型。 我甚至使用了 HasColumnName 来指定哪个列名映射到类的哪个属性,以防它由于大小写差异而无法识别它们。(事实证明,无论是否使用 HasColumnName,我都会遇到错误。)

当我因任何原因调用我设置的存储库时,初始化失败,Entity Framework 抛出异常:

The type 'Tracking' is mapped as a complex type. The Set method, DbSet objects, and DbEntityEntry objects can only be used with entity types, not complex types.

我没有将其设置为复杂类型...为什么EF4会将其视为复杂类型?
1个回答

1

看起来与将字段声明为虚拟有关。您还可以使用数据注释来覆盖表和列名称,以匹配现有的数据库模式。以下是我如何设置POCO模型和dbcontext。

[Table("tracking")]
public class Tracking
{
    public string OrderNumber { get; set; }
    public string TrackingNumber { get; set; }

    [Column(Name = "emailaddress")]
    public string EmailAddress { get; set; }

    [Column(Name = "courier")]
    public string Courier { get; set; }
}

public class TrackingEntities : DbContext
{
    public DbSet<Tracking> Trackings { get; set; }
}

谢谢 - 移除虚拟并添加注释解决了问题。我还注意到我的另一个表格具有不同于“dbo”的模式,也必须在注释中设置它。 - AJH

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接