Ich habe ein Problem, ich versuche, mit dem Entity Framework 6.0 zu lösen und hoffe, dass jemand hier eine Richtung geben kann. Ich fühle mich mit ADO.NET viel wohler aber möchte dieses Projekt in EF machen.So definieren Sie Fremdschlüsselbeziehungen in Entity Framework anders als die Standardmethode
Ich habe ein Objekt namens Politik und eine andere namens Payplan
public class Policy
{
//Various properties not relevant
public PayPlan PaymentPlan { get; set; }
}
public class PayPlan
{
public int PayPlanId { get; set;}
public string Description { get; set; }
}
Wie Sie in diesem Beispiel sehen können, ein Payplan ist ein Kind-Objekt für eine Politik. Es kann null sein oder eine einzelne Instanz eines PayPlans, der einer Richtlinie zugeordnet ist.
Wenn ich den Model Builder ausführe, erstellt er die Tabellen und fügt einen Fremdschlüssel in die Richtlinientabelle für den Datensatz im PayPlan ein. Dies funktioniert nicht wirklich für mich, denn 1) Ich möchte das Db-Schema ähnlich einer früheren Version der Anwendung, in der die PolicyId ist ein ForeignKey in die PayPlan und 2) Mit Cascading Deletes, wenn die PayPlan gelöscht werden würde würde die Politik mitnehmen und ich brauche das anders herum. Die Richtlinie ist das Stammobjektformular, das alle anderen Objekte im DB ihre Beziehungen zeichnen. PayPlan, btw, ist nur ein Beispiel für diese Diskussion, aber im eigentlichen Projekt würde das Policy-Objekt eine Anzahl von untergeordneten Objekten enthalten, die auf ähnliche Weise mit ihm verknüpft sind.
Meine Frage, wie kann ich dies einrichten, entweder durch Datenanmerkungen oder über die Fluent-API, um das von mir beschriebene Schema zu erreichen?
Wenn Sie Payplan wollen FK-Politik zu haben, sollte nicht dann da sein "PayPlan.Policy" -Eigenschaft und nicht "Policy.PaymentPlan"? Mit dem aktuellen Modell kann ein PayPlan mehreren Richtlinien zugeordnet werden, die nicht mit den Anforderungen in der Datenbank kompatibel sind. Randnotiz: Wenn Sie eine vorhandene Datenbank haben, ist es möglicherweise einfacher, Ihr Modell daraus zu generieren und nicht zuerst mit dem Code zu replizieren. – Evk
Das würde für mich bedeuten, dass die Politik dem PayPlan untergeordnet war und nicht umgekehrt. Schließlich könnte ein PayPlan in diesem Beispiel eine Null-Policy haben, was eine Unmöglichkeit wäre, da ein PayPlan nur wie in der Policy definiert existieren würde, aber es wäre durchaus akzeptabel, wenn eine Police keinen Payplan hätte. –
Ich höre Sie auf dem Db. Der existierende Db ist ungefähr 8 Jahre alt und das Produkt von 11 verschiedenen Leuten, die während dieser Zeit daran arbeiteten, verschiedene Pflaster anzuwenden. Ich möchte die Datenbank aufräumen. Aber Sie können immer noch einen Punkt haben, in dem ich zuerst das neue Db schreiben/definieren und dann das Modell bauen könnte. –