Wpis z mikrobloga

Mircy specjaliści od Entity Framework ratunku, bo stracę wszystkie włosy.
Mam sobie relację Project.CreatedBy = ApplicationUser.Id. Ponieważ obydwie entity mają soft delete w OnModelCreate mam:

modelBuilder.Entity().HasOptional(i => i.CreatedBy).WithOptionalDependent().WillCascadeOnDelete(false);

Problem polega na tym, że jak pobieram userów: var users = context.Users zapytanie SQL w uproszczeniu wygląda tak:

SELECT [...] FROM AspNetUsers INNER JOIN Projects
przez co jeśli użytkownik utworzył 10 projektów to mam go w kolekcji 10 razy. A chcę tylko raz.

property w Project do Usera:

[Required]
public ApplicationUser CreatedBy { get; set; }

#programowanie #dotnet #csharp #aspnet #aspnetmvc #entityframework
  • 5
Nie no ja w projecie mam sporo one-to-many i wszystko robię z automatu wystarczy że dobrze model "opiszesz" i "ponazywasz". Przykład:
Przedmioty i nauczyciele czyli userzy:
public partial class LicenseArea
{
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection Users { get; set; }
}

Klasa User musi wtedy posiadać nast. pole:
public virtual LicenseArea LicenseArea { get; set; }

I relacja działa
@andrut1291: Pytanie czy da się zrobić tak, żeby user nie miał tej kolekcji, w zamyśle większość entity ma CreatedBy (w zasadzie to pole jest wyciągnięte do BaseEntity po którym dziedziczy większość) i definiowanie każdej takiej kolekcji w Userze wydaje mi się bez sensu.
Tak samo zresztą jak pisanie fluenta do każdej z tych relacji.
Dodam, że wprawdzie zdefiniowanie relacji po jednej stronie działa, jednak później z kolei mam problem z kaskadowaniem DELETE przy większej ilości entity -> stąd Fluent API