我正在使用带有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对象映射为数据库中的字符串,但不确定这是否是问题。
编辑:我可能会使用地图和映射错误
答案 0 :(得分:1)
添加
modelBuilder.Entity<Bokning>().Ignore(t => t.TimeZone);
到onModelCreating
让它忽略时区属性,这很好。它现在有效
答案 1 :(得分:0)
只需在数据库中保存TimeZoneInfo.Id
属性即可。然后使用TimeZoneInfo
方法获取TimeZoneInfo.FindSystemTimeZoneById()
。