entity-framework - EF 5RC 表拆分为两个以上实体

标签 entity-framework ef-code-first split

有人可以提供示例或解释如何使用 EF 5 RC Code First 上的数据注释将表拆分为两个以上实体吗?

我有 4 个实体,我想将其映射到一张表中。其中每一个的代码是:

[Table("PatientDataEntities")]
public class PatientDataEntity
{
    [Key]
    [ForeignKey("UserFullName")]
    public virtual Guid Id { get; set; }

    public virtual UserFullNameEntity UserFullName { get; set; }

    public virtual GeneralData GenData {get; set;}

    [ForeignKey("Id")]
    public virtual PersonalPatientDataEntity PersonalData { get; set; }

    [ForeignKey("Id")]
    public virtual MedicalPatientDataEntity MedicalData { get; set; }

    [ForeignKey("Id")]
    public virtual FinancialPatientDataEntity FinancialData { get; set; }

} 

[Table("PatientDataEntities")]
public class PersonalPatientDataEntity
{
    [Key]
    [ForeignKey("UserFullName")]
    public virtual Guid Id { get; set; }

    public virtual UserFullNameEntity UserFullName { get; set; }

    [ForeignKey("Id")]
    public virtual MedicalPatientDataEntity MedicalPatientData { get; set; }

    [ForeignKey("Id")]
    public virtual FinancialPatientDataEntity FinancialPatientData { get; set; }

    [ForeignKey("Id")]
    public virtual PatientDataEntity PatientData { get; set; }

    [DataType(DataType.DateTime)]
    public virtual DateTime Birthdate { get; set; }

    public virtual Gender Sex { get; set; }

    public virtual MaritalStatus MStatus { get; set; }

    public virtual byte Children { get; set; }

    public virtual string Education { get; set; }

    public string Profession { get; set; }

} 


[Table("PatientDataEntities")]
public class MedicalPatientDataEntity
{
    [Key]
    [ForeignKey("UserFullName")]
    public virtual Guid Id { get; set; }

    public virtual UserFullNameEntity UserFullName { get; set; }

    [ForeignKey("Id")]
    public virtual PersonalPatientDataEntity PersonalData { get; set; }

    [ForeignKey("Id")]
    public virtual FinancialPatientDataEntity FinancialData { get; set; }

    [ForeignKey("Id")]
    public virtual PatientDataEntity PatientData { get; set; }

    public virtual string ClinicalHistoryNumber { get; set; }

    public virtual BiologicalState State { get; set; }

    public virtual Guid PhysicianId { get; set; }

    public virtual DateTime? RegisterDate { get; set; }

    public virtual bool AcceptsDataTreatment { get; set; }

    public virtual bool AcceptsImageTreatment { get; set; }

    public virtual /*List<Allergy>*/ string Allergies { get; set; }

    public virtual /*List<Surgery>*/ string Surgeries { get; set; }

    public virtual /*List<Medication>*/ string Medications { get; set; }

    public virtual /*List<MedicalPrecedent>*/ string MedicalPrecedents { get; set; }

    [DataType(DataType.MultilineText)]
    public virtual string Family { get; set; }

    public virtual string Nicotinism { get; set; }

    public virtual float? Weight { get; set; }

    public virtual float? Height { get; set; }

    [NotMapped]
    public virtual float? BodyMassIndex { get; set; }

    public virtual string Remarks { get; set; }
} 


[Table("PatientDataEntities")]
public class FinancialPatientDataEntity
{
    [Key]
    [ForeignKey("UserFullName")]
    public virtual Guid Id { get; set; }

    public virtual UserFullNameEntity UserFullName { get; set; }

    [ForeignKey("Id")]
    public virtual PersonalPatientDataEntity PersonalData { get; set; }

    [ForeignKey("Id")]
    public virtual MedicalPatientDataEntity MedicalData { get; set; }

    [ForeignKey("Id")]
    public virtual PatientDataEntity PatientData { get; set; }

    public virtual string KindOfPatient { get; set; }

    public virtual string Isapre { get; set; }

} 

我的背景是这样的:

public class MedicDbContext : DbContext
{
    public DbSet<UserFullNameEntity> UsersFullName { get; set; }
    public DbSet<MedicDb.Patient.PatientDataEntity> PatientDataEntities { get; set; }

    public DbSet<MedicDb.Patient.Personal.PersonalPatientDataEntity> PersonalPatientDataEntities { get; set; }

    public DbSet<MedicDb.Patient.Financial.FinancialPatientDataEntity> FinancialPatientDataEntities { get; set; }

    public DbSet<MedicDb.Patient.Medical.MedicalPatientDataEntity> MedicalPatientDataEntities { get; set; }
} 

当我运行时,我收到以下异常:

An exception of type 'System.InvalidOperationException' occurred in EntityFramework.DLL but was not handled in user code

Additional information: Unable to determine the principal end of an association between the types 'MedicDb.Patient.Medical.MedicalPatientDataEntity' and 'MedicDb.Patient.Personal.PersonalPatientDataEntity'. The principal end of this association must be explicitly configured using either the relationship fluent API or data annotations.

我在这里做错了什么?我真的需要一些帮助。

最佳答案

好吧,我解决了这个问题,我想主要原因是我对这个主题的无知,[ForeignKey] 属性必须仅位于关系的一端,这修复了异常,但使 4 个实体位于同一张表,它们 4 之间必须存在一对一的关系,这看起来有点不自然,但这是唯一的工作方式。因此,最后我没有拆分我的表,而是创建 4 个独立的表,这些表不是在 4 个表之间而是在 PatientDataEntity 和其他 3 个表之间具有一对一的关系,这是通过删除 [ 来完成的ForeingKey] 来自 PatientDataEntity 属性的注释,但将它们保留在其他 3 个实体上(在指向 PatientDataEntity 的导航属性上)。 就这样。 以防其他人遇到同样的问题。

感谢大家

胡安·卡洛斯·加尔维斯

关于entity-framework - EF 5RC 表拆分为两个以上实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11867742/

相关文章:

entity-framework - 将嵌套查询 SQL 转换为 EF

asp.net-mvc - LINQ 与 EF 导航属性连接

c# - EntityKey 和 ApplyPropertyChanges()

c# - EF6 CF 中的外键问题

c# - 拆分以逗号分隔的行,注意不要在文本 block 内的逗号上拆分

java - 是否有一些工具可以在 Android 上实现 "Code first"方法

c# - EF Code First 中的模型 n--n 关系如何与自动生成的 View 正常工作?

javascript - 使用 Javascript 将字符串添加到 CSS 代码

postgresql - 如何在 psql 中将一列拆分为更多列?

entity-framework - 首先, Entity Framework 代码:如何为 “Default”值注释外键?