我有表模型在我的客戶數據庫:實體框架:在類似的數據庫映射多個類似的類一個表
public class Doctor
{
public int Id { get; set; }
public int Filial { get; set; }
public string ShortName { get; set; }
public string FullName { get; set; }
public string Phone { get; set; }
public int? DepartmentId { get; set; }
public Department Department { get; set; }
}
public class DoctorConfiguration : EntityTypeConfiguration<Doctor>
{
public DoctorConfiguration()
{
ToTable("DOCTOR");
Property(d => d.Id).HasColumnName("DCODE").IsRequired();
Property(d => d.Filial).HasColumnName("FILIAL");
Property(d => d.ShortName).HasColumnName("DNAME");
Property(d => d.FullName).HasColumnName("FULLNAME");
Property(d => d.Phone).HasColumnName("DPHONE");
Property(d => d.DepartmentId).HasColumnName("DEPNUM");
HasKey(d => d.Id);
HasOptional(d => d.Department).WithMany(dep => dep.Doctors).HasForeignKey(d => d.DepartmentId);
}
}
最近其他客戶端來了。他們的數據庫大多數是相同的模型,但是一些字段已經將類型從int更改爲long。 新的醫生模型的樣子:
public class Doctor
{
public long Id { get; set; }
public long Filial { get; set; }
public string ShortName { get; set; }
public string FullName { get; set; }
public string Phone { get; set; }
public long? DepartmentId { get; set; }
public Department Department { get; set; }
}
如何將新的醫生模型格式正確映射到同一個表「醫生」?
該應用程序使用Firebird數據庫。 「舊」客戶端版本不支持長數字格式。
如果創建了類似的Doctor配置,則會出現一個錯誤: 「實體類型'DoctorInt'和'Doctor'不能共享表'DOCTOR',因爲它們不在同一類型層次結構中或者沒有有效的到一個具有匹配的主鍵的外鍵關係。「
我知道關於逐層次表(TPH)的繼承。看起來在這種情況下它不起作用。
Doctor的類型只是這個問題的許多類似類型之一。應用程序中的代碼與第一個模型格式相關聯。我不想改變這一切... 我想重用現有的功能。
假設ID字段是主鍵我不認爲你可以。 –
可以肯定......你有'int'和'long',但你只能期望int兼容值,對吧?另外,我還沒有真正理解你的場景......都是應該在相同的應用程序中存在的醫生類,在相同的DbContext中,針對不同的(但相似的)數據庫或完全相同的數據庫實例? ... – grek40
@ grek40我想,在這種情況下,我必須具有「int」和「long」兼容值。舊客戶端擁有Firebird數據庫的版本,其中「long」不受支持。新客戶端擁有'long'數據庫版本。我可以在代碼中將int轉換爲long。代碼中的操作將會「長」。 「 – Andriy