将片段错误TimeZoneInfo对象映射到db EF Code First

时间:2015-11-09 20:15:59

标签: c# wpf entity-framework telerik dbcontext

我正在使用带有RadScheduleView的Teleriks WPF UI,我无法将自定义约会类映射到数据库。我正在使用代码优先方法,当我创建自定义资源时,一切正常,但自定义约会类失败。

编译时我得到了这个错误。

"\r\n(6,10) : error 3004: Problem in mapping fragments starting at line 6:No mapping specified for properties Bokning.TimeZone in Set Bokning.\r\nAn Entity with Key (PK) will not round-trip when:\r\n  Entity is type [TelerikWpfApp1.Bokning]\r\n"

这是我的bokning课程

class Bokning : Appointment
{
    public Bokning() { }
    private int id;
    public int Id
    {
        get
        {
            return this.Storage<Bokning>().id;
        }

        set
        {
            var storage = this.Storage<Bokning>();
            if (storage.id != value)
            {
                storage.id = value;
                this.OnPropertyChanged(() => this.Id);
            }
        }
    }
    public override IAppointment Copy()
    {
        var customAppointment = new Bokning();
        customAppointment.CopyFrom(this);
        return customAppointment;
    }
    public override void CopyFrom(IAppointment other)
    {
        var customAppointment = other as Bokning;
        if (customAppointment != null)
        {
            this.Id = customAppointment.Id;
        }
        base.CopyFrom(other);
    }

}

这是我的背景

class DBContext : DbContext
{
    public DBContext(): base("ADO Solutions")
    {
    }
    public DbSet<Personal> Personal { get; set; }

    public DbSet<Jobb> Jobb { get; set; }

    public DbSet<Bokning> Bokning { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
    }


}

Personal和Jobb类没有问题。但是这个班级给我带来了麻烦。我认为从Appointment类中映射TimeZone属性存在问题。在数据库中创建了Bokning表,但并非所有列都存在。我认为它崩溃导致TimeZone属性是一个TimeZoneInfo对象。

我认为我需要一种方法将TimeZoneInfo对象映射为数据库中的字符串,但不确定这是否是问题。

编辑:我可能会使用地图和映射错误

2 个答案:

答案 0 :(得分:1)

添加

modelBuilder.Entity<Bokning>().Ignore(t => t.TimeZone);

到onModelCreating

让它忽略时区属性,这很好。它现在有效

答案 1 :(得分:0)

只需在数据库中保存TimeZoneInfo.Id属性即可。然后使用TimeZoneInfo方法获取TimeZoneInfo.FindSystemTimeZoneById()