Как использовать первичный ключ в других классах в качестве внешнего ключа и установить значение автоматически при определении первичного ключа.(Entity Framework) - PullRequest
0 голосов
/ 25 октября 2018

Я работаю над чтением XML-файла, но в нем много блоков с другими блоками внутри.

Проблема в том, что в корневом классе есть первичный ключ с именем DocumentNumber, мне нужно это значениево всех других блоках, потому что при создании таблиц (каждый класс является таблицей на сервере sql) мне нужно будет соединить все эти таблицы, и мне нужен этот ключ DocumentNumber.Таким образом, что я покажу ниже, если я сгенерирую таблицы с помощью Update-Database, например таблицы EDI_IFTMBC300_DOC_DT, для него будет создан DocumentNumber в качестве внешнего ключа, но класс внутри EDI_IFTMBC300_DOC_DT, то есть EDI_IFTMBC300_DOC_DT_LOC, не будетиметь этот DocumentNumber из корневого класса.

Как я могу создать эти классы таким образом, чтобы все классы имели этот первичный ключ DocumentNumber в корневом классе в качестве внешнего ключа, а также при чтении сериализации XML-файла,он уже установит все внешние ключи со значением, равным DocumentNumber в корневом классе.

[XmlRoot("Document")]
[Table("EDI_IFTMBC300_DOC")]
public class EDI_IFTMBC300_DOC
{
    public EDI_IFTMBC300_DOC()
    {
        this.EDI_IFTMBC300_DOC_DTP = new List<Model.EDI_IFTMBC300_DOC_DTP>();
        this.EDI_IFTMBC300_DOC_REF = new List<Model.EDI_IFTMBC300_DOC_REF>();
        this.EDI_IFTMBC300_DOC_DT = new List<Model.EDI_IFTMBC300_DOC_DT>();
        this.EDI_IFTMBC300_DOC_NAME = new List<Model.EDI_IFTMBC300_DOC_NAME>();
        this.EDI_IFTMBC300_DOC_ID = new Model.EDI_IFTMBC300_DOC_ID();
        this.EDI_IFTMBC300_DOC_ED = new List<Model.EDI_IFTMBC300_DOC_ED>();
        this.EDI_IFTMBC300_DOC_LOC = new List<Model.EDI_IFTMBC300_DOC_LOC>();
    }

    public string SenderID { get; set; }
    public string ReceiverID { get; set; }
    public string DocumentDate { get; set; }
    public string DocumentTime { get; set; }
    [Key]
    public string DocumentNumber { get; set; }
    public string FunctionCode { get; set; }
    public string TransportService { get; set; }

    [XmlElementAttribute("DateTimePeriod")]
    public virtual List<EDI_IFTMBC300_DOC_DTP> EDI_IFTMBC300_DOC_DTP { get; set; }

    [XmlElementAttribute("Reference")]
    public virtual List<EDI_IFTMBC300_DOC_REF> EDI_IFTMBC300_DOC_REF { get; set; }

    [XmlElementAttribute("DetailsTransport")]
    public virtual List<EDI_IFTMBC300_DOC_DT> EDI_IFTMBC300_DOC_DT { get; set; }

    [XmlElementAttribute("Name")]
    public virtual List<EDI_IFTMBC300_DOC_NAME> EDI_IFTMBC300_DOC_NAME { get; set; }

    [XmlElementAttribute("ItemDetails")]
    public virtual EDI_IFTMBC300_DOC_ID EDI_IFTMBC300_DOC_ID { get; set; }

    [XmlElementAttribute("EquipmentDetail")]
    public virtual List<EDI_IFTMBC300_DOC_ED> EDI_IFTMBC300_DOC_ED { get; set; }

    [XmlElementAttribute("Location")]
    public virtual List<EDI_IFTMBC300_DOC_LOC> EDI_IFTMBC300_DOC_LOC { get; set; }
}

public class EDI_IFTMBC300_DOC_LOC
{
    [Key]
    public string LocationQualifier { get; set; }
    public string LocationValue { get; set; }
}

public class EDI_IFTMBC300_DOC_DTP
{
    [Key]
    public string Qualifier { get; set; }
    public string Value { get; set; }
}

public class EDI_IFTMBC300_DOC_REF
{
    [Key]
    public string ReferenceQualifier { get; set; }
    public string ReferenceValue { get; set; }
}

public class EDI_IFTMBC300_DOC_DT
{
    public EDI_IFTMBC300_DOC_DT()
    {
        this.EDI_IFTMBC300_DOC_DT_LOC = new List<Model.EDI_IFTMBC300_DOC_DT_LOC>();
    }

    [Key]
    [Column(Order = 0)]
    public string StageCode { get; set; }
    [Key]
    [Column(Order = 1)]
    public string VoyageNumber { get; set; }
    [Key]
    [Column(Order = 2)]
    public string VesselName { get; set; }

    [XmlElementAttribute("Location")]
    public virtual List<EDI_IFTMBC300_DOC_DT_LOC> EDI_IFTMBC300_DOC_DT_LOC { get; set; }

}

public class EDI_IFTMBC300_DOC_DT_LOC
{
    public EDI_IFTMBC300_DOC_DT_LOC()
    {
        this.EDI_IFTMBC300_DOC_DT_LOC_DTP = new List<Model.EDI_IFTMBC300_DOC_DT_LOC_DTP>();
    }

    [Key]
    [Column(Order = 0)]
    public string LocationQualifier { get; set; }
    public string LocationValue { get; set; }

    [XmlElementAttribute("DateTimePeriod")]
    public virtual List<EDI_IFTMBC300_DOC_DT_LOC_DTP> EDI_IFTMBC300_DOC_DT_LOC_DTP { get; set; }
}

public class EDI_IFTMBC300_DOC_DT_LOC_DTP
{
    [Key]
    public string Qualifier { get; set; }
    public string Value { get; set; }
}

public class EDI_IFTMBC300_DOC_NAME
{
    [Key]
    [Column(Order = 0)]
    public string NameCode { get; set; }
    [Key]
    [Column(Order = 1)]
    public string NameValue { get; set; }
}

public class EDI_IFTMBC300_DOC_ID
{
    public EDI_IFTMBC300_DOC_ID()
    {
        this.EDI_IFTMBC300_DOC_DETAILS = new List<Model.EDI_IFTMBC300_DOC_DETAILS>();
    }

    [Key]
    public string DocNumber { get; set; }

    [XmlElementAttribute("ItemNumber")]
    public virtual List<EDI_IFTMBC300_DOC_DETAILS> EDI_IFTMBC300_DOC_DETAILS { get; set; }

}

public class EDI_IFTMBC300_DOC_DETAILS
{
    public EDI_IFTMBC300_DOC_DETAILS()
    {
        this.EDI_IFTMBC300_DOC_ID_DG = new List<Model.EDI_IFTMBC300_DOC_ID_DG>();
    }

    [Key]
    [XmlAttribute("item")]
    public string item { get; set; }
    public int NumberPackages { get; set; }
    public string TypeOfPackages { get; set; }

    [ForeignKey("EDI_IFTMBC300_DOC")]
    public string DocumentNumber { get; set; }
    public EDI_IFTMBC300_DOC EDI_IFTMBC300_DOC { get; set; }

    [XmlElementAttribute("DangerousGoods")]
    public virtual List<EDI_IFTMBC300_DOC_ID_DG> EDI_IFTMBC300_DOC_ID_DG { get; set; }

}

public class EDI_IFTMBC300_DOC_ID_DG
{
    [Key]
    public string HazardCode { get; set; }
    public string UndgNumber { get; set; }
}

public class EDI_IFTMBC300_DOC_ED
{
    [Key]
    public string Container { get; set; }
}
...