3个表之间的EF核心关系

时间:2019-06-24 01:04:20

标签: .net entity-framework entity-framework-core

我有一个表Orders,其中Orderid为主键,患者id为外键。我的第二个表是“患者”表,具有“患者ID”作为主键。第三个表OrderPatient仅具有订单ID作为外键,但具有所有患者详细信息(例如患者的名字,姓氏等)。 OrderPatient表没有Patientid作为外键。我正在使用现有数据库来开发EF core。我正在尝试自定义order Patient模型,使其具有Patients类的Patientdetails属性,如下所示。但是由于OrderPatient表中没有患者ID作为键,因此我无法在上下文类中建立关系。访问OrderPatient模型时如何建立OrderPatient与Patient类之间的关系并填充Patientdetails。

我尝试使用efcore关系和导航属性。

    public partial class Orders
{

    public int OrderId { get; set; }
    public int CustomerId { get; set; }
    public int PatientId { get; set; }
    public virtual Patients Patient { get; set; }
    public virtual OrderPatient OrderPatient { get; set; }

}


public partial class Patients
{

    public int PatientId { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string MiddleName { get; set; }
    public DateTime? Dob { get; set; }
    public string Ssn { get; set; }
    public string Sex { get; set; }
    public virtual ICollection<Orders> Orders { get; set; }

}

 public partial class OrderPatient
{
    public int OrderId { get; set; }       
    public Patients PatientDetails { get; set; }
    public int? OptHeight { get; set; }
    public int? OptWeight { get; set; }
    public string OptPrimaryLanguage { get; set; }
    public int CreatedBy { get; set; }
    public DateTime CreatedDate { get; set; }
  }  

我正在尝试自定义订购患者模型,使其具有Patients类的Patientdetails属性,如下所示。但是由于OrderPatient表中没有患者ID作为键,因此我无法在上下文类中建立关系。访问OrderPatient模型时如何建立OrderPatient与Patient类之间的关系并填充Patientdetails。

1 个答案:

答案 0 :(得分:0)

在“订购病人”表上为订购添加导航属性。

API_ID = '///foo///'

class GetWeather:
    def __init__(self, city, country):
        self.city = city
        self.country = country

    def coords(self):
        url_city = ('http://api.openweathermap.org/data/2.5/weather?'
                    'q={},{}&appid={}'.format(self.city, self.country, API_ID)
        weatherdata = requests.get(url_city).json()  # Call function to get data.
        print(weatherdata)


class MainApplication:
    def __init__(self, master):
        self.getweather = GetWeather('town', 'country')
        self.master = master
        self.frame = tk.Frame(self.master)
        self.button1 = tk.Button(self.frame, text='Coords', width=25,
                                 command=self.getweather.coords)
        self.button1.pack()
        self.frame.pack()


def main():
    root = tk.Tk()
    app = MainApplication(root)
    root.mainloop()

if __name__ == "__main__":
    main()

在您的订单表上

public partial class OrderPatient
{
    public int OrderId { get; set; }       
    public Patients PatientDetails { get; set; } //Remove this
    public int? OptHeight { get; set; }
    public int? OptWeight { get; set; }
    public string OptPrimaryLanguage { get; set; }
    public int CreatedBy { get; set; }
    public DateTime CreatedDate { get; set; }

    public virtual Order Order { get; set; }// Add this
}  

然后从OrderPatient访问Patient表。

public partial class Orders
{

    public int OrderId { get; set; }
    public int CustomerId { get; set; }
    public int PatientId { get; set; }
    public virtual Patients Patient { get; set; }
    public virtual OrderPatient OrderPatient { get; set; }// Remove this

}

由于您正在使用延迟加载。我认为这会起作用。我希望这会有所帮助。