Próbuję zrobić Upsert z obiektu Advertisement
, który zawiera List<AdImage>
. Numer Advertisement
zawiera klucz obcy, który odpowiada User
. A user
może mieć zero lub więcej Advertisements
, a Advertisement
ma jedno lub więcej AdImages
.Jak określić prawidłowe porządkowanie dla operacji zależnych podczas definiowania relacji encji?
upsert nie powiedzie się z następujących czynności: Wystąpił
błąd podczas zapisywania podmioty, które nie narażają klucz obcy właściwości ich relacji. Właściwość EntityEntries zwróci wartość null , ponieważ nie można zidentyfikować pojedynczej encji jako źródła wyjątku. Obsługa wyjątków podczas zapisywania może być łatwiejsza dzięki ujawnieniu właściwości klucza obcego w typach jednostek. Szczegółowe informacje można znaleźć w artykule InnerException pod adresem .
Gdzie wewnętrzna exeption jest:
Nie można określić prawidłową kolejność dla operacji zależnych. Zależności mogą występować z powodu ograniczeń klucza obcego, wymagań modelu lub wartości generowanych przez sklep.
advertisement
jest tworzony w bardzo prosty sposób, jak:
var ad = new Advertisement
{
AdImages = new List<AdImage>
{
new AdImage {Image = model.Image}
},
Message = model.Message,
Title = model.Title,
User = user,
};
_aAdAppService.UpsertAdvertisement(ad);
Podmioty o których mowa, są określone jako:
public class User : AbpUser<Tenant, User>
{ // AbpUser is a 3rd party class which defines Id as a primary key
public string AccessToken { get; set; }
public long UserId { get; set; }
public virtual List<Advertisement> Advertisements { get; set; }
}
public class Advertisement : Entity
{
[Key]
public long Id { get; set; }
public string Title { get; set; }
public string Message { get; set; }
public List<AdImage> AdImages { get; set; }
public virtual User User { get; set; }
}
public class AdImage : Entity
{
[Key]
public int Id { get; set; }
public string Image { get; set; }
public virtual Advertisement Advertisement { get; set; }
}
ten sposób relacje są określone:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<User>()
.HasMany(u => u.Advertisements)
.WithRequired(x => x.User);
modelBuilder.Entity<Advertisement>()
.HasMany(a => a.AdImages)
.WithRequired(x => x.Advertisement);
modelBuilder.Entity<AdImage>()
.HasRequired(x => x.Advertisement);
base.OnModelCreating(modelBuilder);
}
Co oznacza komunikat o błędzie szałas oznacza? Nie widzę, jak moje relacje są zdefiniowane niepoprawnie. Jak mogę to rozwiązać?
Tylko rzuca okiem na to, a to może być strzał w ciemność. Czy próbowałeś zmienić publiczną listę: AdImages {get; set;} w swoim modelu reklamy do właściwości nawigacji EF: publiczny wirtualny ICollection AdImages {get; ustawić;}? –
JDupont
Hmm, nie jestem pewien, czy pomogłabym, ale spróbuj usunąć 'modelBuilder.Entity() .HasRequired (x => x.Advertisement);', relacja jest już poprawnie skonfigurowana przez poprzednią instrukcję, a to może ją niepoprawnie zmienić ponieważ jest niekompletna. –