Entity Framework egy-egy kapcsolat
2020-12-04T11:23:27+01:00
2020-12-05T07:09:19+01:00
2022-08-11T23:25:30+02:00
Lechu947
Sziasztok!

Egy időpont foglalós adatbázisom van, ahol van egy tábla az ügyfélnek, egy az időpontjának, abban az ügyfél ID idegen kulcs, és van egy tábla ami az időpont részleteit összegzi, abban pedig az időpont tábla ID-je az idegen kulcs.

Viszont amikor felveszek egy új időpont részleteit, például egy már meglévő időpont ID-re, akkor a régi időponton lévő időpont részletei rekord törlődik, hogyan tudnám megoldani, hogy már foglalt időpont ID-val ne lehessen létrehozni, új időpont részleteit?
---------------------------------------------------------------------------------------------------------
Az időpont összegző, és időpont tábla között beállítottam az egy-egy kapcsolatot úgy, ahogy ezen a linken mutatják:
Configuring One To One Relationships In Entity Framework Core

-----------------------------------------------------------------------
Az enyém pedig így néz ki konkrétan:
Időpont táblában:

[Key] [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public int Id { get; set; } [NotMapped] public virtual AppointmentDetail AppointmentDetail { get; set; } [ForeignKey(nameof(Client))] public int ClientId { get; set; }
----------------------------------------------------------------------------------------------------------
Időpont részletei táblában:

[Key] [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public int AppointmentDetailId { get; set; } [ForeignKey(nameof(Appointment))] public int AppointmentId { get; set; } [NotMapped] public virtual Appointment Appointment { get; set; } public virtual TotalPaid {get; set;} public virual Discount {get; set;}
----------------------------------------------------------------------------------------------------------
Kapcsolat beállítása: 

modelBuilder.Entity<Appointment>(entity => { entity .HasOne(appointment => appointment.AppointmentDetail) .WithOne(appointmentDetail => appointmentDetail.Appointment) .HasForeignKey<AppointmentDetail>(appointmentDetail => appointmentDetail.AppointmentId) .OnDelete(DeleteBehavior.Cascade); });
Köszönöm!
Mutasd a teljes hozzászólást!
Szia. Entity Framework Core-hoz nem értek, de 1:1 kapcsolatot szerintem nem így kellene csinálni. Először is az adatbázisban így kellene létrehozni a táblákat (csak a lényeg):

Appointment Id: primary key AppointmentDetail AppointmentId: primary key, foreign key (Appointment.Id)
Az AppointmentDetail elsődleges kulcsa egyben idegen kulcs is az Appointment táblára.

Entity Framework-ben Data Annotation-nel:

class Appointment { [Key] public int Id { get; set; } public virtual AppointmentDetail AppointmentDetail { get; set; } } class AppointmentDetail { [Key] [ForeignKey(nameof(Appointment))] public int Id { get; set; } public virtual Appointment Appointment { get; set; } }

Ha Fluent API-val szeretnéd megcsinálni attribútumok helyett, akkor elmaradhat a ForeignKey attribútum:

protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Entity<Appointment>() .HasOptional(e => e.AppointmentDetail) .WithRequired(e => e.Appointment); }
Mutasd a teljes hozzászólást!

abcd