Dodanie encji z zagnieżdżonym polem Required po Id

0

Witam

Może i późna godzina ale tak męczy mnie taka rzecz, której o dziwo nie mogę znaleźć w googlu. Mam encję:

public class Produkt {
  public int Id [ get; set; }
  public string ProductName { get; set; }
  [Required]
  public virtual User { get; set; }
  public int UserId { get; set; }
}

public class User {
  int Id { get; set; }
  string Name { get; set; }
}

Userzy w bazie istnieją, zatem nie ściągam sobie całego ale tylko Id przechowuje. I teraz chcę dodać nowy produkt.

int userId = 111;
var produkt = new Product { ProductName = "01", UserId = userId };
appContext.Produkty.Add(produkt);
appContext.SaveChanges()

W tym momencie wywala mi błąd, że brakuje mu pola User, które jest required. Ktoś wie jak rozwiązać ten problem?

0

Masz zaflagowany User jako Required, czyli szybciej musisz podać User niż UserID. Spróbuj zmienić atrybut [Required] z User na UserID albo prócz podawania UserID i ProductName przy tworzeniu instancji klasy dodaj jeszcze User.

0

A jak zrobisz var produkt = new Product { ProductName = "01", User = new User { UserId = userId } };?
Tylko tego Usera trzeba odpiąć jakoś od kontekstu, żeby EF nie próbował go zapisać.

0

@somekind - rozwiązałem ten problem podobnie do tego co zaproponowałeś, ot tylko new Usera już na bindowaniu zrobiłem. Minusem tego rozwiązania jest właśnie to, że ten User jest nie podpięty do kontekstu i trzeba dodatkową linią go zatachować bo inaczej error zduplikowanego update'a wywalał - czyli odwrotnie do tego co mówisz ;)

@camed_ - zamiana [Required] na Id w sumie nie rozwiązuje sprawy, bo w drugą stronę przy wypełnionym Userze może ono być puste. I tak to ostatecznie obecnie działa. Zatem pole [NazwaId] jako sam klucz poza polem Nawigacyjnym wydaje się w tym przypadku niemożliwa do wykorzystania przy polach typu [Required]. Póki co, działa jak działa ale jakby ktoś miał rozwiązanie tego problemu to z chęcią bym je poznał :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1