Rename
Rename
CC#
Created by Rename on 10/8/2024 in #help
How to setup shared/common data in a web app
I've been working on a legacy project with .NET Framework 4.6. there is a Shift class and initially it had this code in its Shift entity class:
public static Shift None => Database.Find<Shift>(s => s.Department == null && s.IsNone);

public static Shift DayOff => Database.Find<Shift>(s => s.Department == null && s.IsDayOff);
public static Shift None => Database.Find<Shift>(s => s.Department == null && s.IsNone);

public static Shift DayOff => Database.Find<Shift>(s => s.Department == null && s.IsDayOff);
now I'm updating everything to .NET 8 and trying to use clean architecture, I'm using Entity Framewokr 8. It does not make sense to use direct DB calls in the entity class, these Shifts are all saved in the DB and could be edited anytime but the None and DayOff shifts are used very often. an example is GetShift() method for a staff which has something like this:
public Shift GetShift(DateTime date)
{

var contract = GetContract(date);
if (contract == null)
return Shift.None;
...
}
public Shift GetShift(DateTime date)
{

var contract = GetContract(date);
if (contract == null)
return Shift.None;
...
}
I'm a bit lost on what would be the best way to set this up. I could pass those shifts to the GetShift method from a service but I'm wondering if there's a better solution, this GetShift method is used in a lot of .Where clauses also.
33 replies
CC#
Created by Rename on 6/13/2024 in #help
"Duplicate property" Entity Framework 8 Error
I've got this error popping up on OnModelCreating method:
System.InvalidOperationException: 'The property or navigation 'Rotation' cannot be added to the 'AlternativeShift' type because a property or navigation with the same name already exists on the 'AlternativeShift' type.'
System.InvalidOperationException: 'The property or navigation 'Rotation' cannot be added to the 'AlternativeShift' type because a property or navigation with the same name already exists on the 'AlternativeShift' type.'
this is how I'm setting up AlternativeShift there:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);

modelBuilder.Entity<AlternativeShift>(entity =>
{
entity.HasKey(e => e.Id)
.HasName("PK__Alternat__3214EC068342A05F")
.IsClustered(false);

entity.HasIndex(e => e.Rotation, "IX_AlternativeShifts->Rotation");

entity.HasIndex(e => e.Shift, "IX_AlternativeShifts->Shift");

entity.HasIndex(e => new { e.Rotation, e.Shift, e.Weekday }, "UQ_RotaShiftWeekday").IsUnique();

entity.Property(e => e.Id).ValueGeneratedNever();

entity.HasOne(d => d.Rotation).WithMany(p => p.AlternativeShifts)
.HasForeignKey(d => d.RotationId)
.OnDelete(DeleteBehavior.ClientSetNull)
.HasConstraintName("FK_AlternativeShift.Rotation");

entity.HasOne(d => d.Shift).WithMany(p => p.AlternativeShifts)
.HasForeignKey(d => d.ShiftId)
.OnDelete(DeleteBehavior.ClientSetNull)
.HasConstraintName("FK_AlternativeShift.Shift");

entity.HasOne(d => d.Weekday).WithMany(p => p.AlternativeShifts)
.HasForeignKey(d => d.WeekdayId)
.HasConstraintName("FK__Alternati__Weekd__1352D76D");
});
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);

modelBuilder.Entity<AlternativeShift>(entity =>
{
entity.HasKey(e => e.Id)
.HasName("PK__Alternat__3214EC068342A05F")
.IsClustered(false);

entity.HasIndex(e => e.Rotation, "IX_AlternativeShifts->Rotation");

entity.HasIndex(e => e.Shift, "IX_AlternativeShifts->Shift");

entity.HasIndex(e => new { e.Rotation, e.Shift, e.Weekday }, "UQ_RotaShiftWeekday").IsUnique();

entity.Property(e => e.Id).ValueGeneratedNever();

entity.HasOne(d => d.Rotation).WithMany(p => p.AlternativeShifts)
.HasForeignKey(d => d.RotationId)
.OnDelete(DeleteBehavior.ClientSetNull)
.HasConstraintName("FK_AlternativeShift.Rotation");

entity.HasOne(d => d.Shift).WithMany(p => p.AlternativeShifts)
.HasForeignKey(d => d.ShiftId)
.OnDelete(DeleteBehavior.ClientSetNull)
.HasConstraintName("FK_AlternativeShift.Shift");

entity.HasOne(d => d.Weekday).WithMany(p => p.AlternativeShifts)
.HasForeignKey(d => d.WeekdayId)
.HasConstraintName("FK__Alternati__Weekd__1352D76D");
});
10 replies