Skocz do zawartości

[sdk]Dodanie asortymentu do modelu


Zobacz rozwiązanie Rozwiązane przez Mateusz Matuszewski,

Polecane posty

Dzień dobry,

w jaki sposób dodaje się asortyment do modelu?

Mam coś takiego

IModele modele = sfera.PodajObiektTypu<IModele>();
IAsortymenty asortymenty = sfera.PodajObiektTypu<IAsortymenty>();
var mmodel = modele.Dane.Wszystkie().Where(m => m.Sygnatura.PelnaSygnatura == "l100").First();
using (IModel model = modele.Znajdz(mmodel))
{
  model.Dane.Asortymenty.Add(asortymenty.Dane.Wszystkie().Where(w => w.Id == 100030).FirstOrDefault());
  model.Zapisz();
  model.WypiszBledy();
}

I to powoduje wyjątek na linijce model.Dane.Asortymenty.Add

Cytat

InsERT.Mox.DataAccess.UnsponsoredModificationException: „Modyfikacja pola Asortymenty encji Model nie powiodła się, ponieważ albo encja nie została przyłączona do obiektu kontrolującego modyfikację danych (biznesowego), albo ten, do którego jest przyłączona nie pozwala na zmianę tego konkretnego pola.”

 

Asortyment o id 100030 oczywiście istnieje.

Link to postu
  • Rozwiązanie

Asortyment do modelu można przypisać tylko od strony asortymentu:
 

IModele modele = sfera.PodajObiektTypu<IModele>();
IAsortymenty asortymenty = sfera.PodajObiektTypu<IAsortymenty>();
Asortyment asortyment = asortymenty.Dane.Wszystkie().Where(w => w.Id == 100030).First();
Model model = modele.Dane.Wszystkie().Where(m => m.Sygnatura.PelnaSygnatura == "l100").First();

using (IAsortyment asortymentBO = asortymenty.Znajdz(asortyment))
{
  asortymentBO.Dane.Model = model;
  
  // przypisanie modelu spowodowało ustawienie domyślnych cech, możemy je teraz zmienić
  WlasciwoscAsortymentu kolorAsortymentu = asortymentBO.Dane.WlasciwosciAsortymentu.First(w => w.Wlasciwosc.Nazwa == "Kolor");
  Wlasciwosc kolor = kolorAsortymentu.Wlasciwosc;
  CechaAsortymentu kolorCzarny = kolor.CechyAsortymentu.First(c => c.Nazwa == "Czarny");
  
  kolorAsortymentu.CechyAsortymentu.Clear();
  kolorAsortymentu.CechyAsortymentu.Add(kolorCzarny);
  
  
  asortymentBO.Zapisz();
}

 

Link to postu

Próbowałam w ta stronę ale uznałam że skoro model jest nullem to pewnie trzeba jakoś od strony modelu.

 

A w jaki sposób przypisywać cechy dla nowego asortymentu? Bo ta metoda coś nie działa

 

Cytat

WlasciwoscAsortymentu kolorAsortymentu = asortyment.Dane.WlasciwosciAsortymentu.First(w => w.Wlasciwosc.Nazwa == "Kolor");
System.InvalidOperationException: „Sekwencja nie zawiera pasującego elementu.”

 

Próbowałam tak jak przy dodawaniu cech modelu ale coś tu nie działa

 

using (IAsortyment asortyment = asortymenty.Utworz())
{
	asortyment.Dane.Nazwa = "A1 Rozmiar: XS Kolor: Czarny";
	asortyment.WypelnijNaPodstawieSzablonu(szablon.DaneDomyslne.Towar);

	asortyment.AutoSymbol();
	asortyment.Dane.Model = model.Dane;
	if (!asortyment.Zapisz())
	{
		asortyment.WypiszBledy();
	}
	asortyment.Dane.WlasciwosciAsortymentu.Clear();

	{
		var wl = new WlasciwoscAsortymentu();
		asortyment.Dane.WlasciwosciAsortymentu.Add(wl);
		wl.LP = 1;
		wl.Wlasciwosc = wlasciwosci.Dane.Wszystkie().Where(w => w.Id == 100001).FirstOrDefault();
		wl.CechyAsortymentu.Add(cechy.Dane.Wszystkie().Where((w) => w.Id == 100011).FirstOrDefault());
	}
	{
		var wl = new WlasciwoscAsortymentu();
		asortyment.Dane.WlasciwosciAsortymentu.Add(wl);
		wl.LP = 2;
		wl.Wlasciwosc = wlasciwosci.Dane.Wszystkie().Where(w => w.Id == 100000).FirstOrDefault();
		wl.CechyAsortymentu.Add(cechy.Dane.Wszystkie().Where((w) => w.Id == 100008).FirstOrDefault());
	}

	if (!asortyment.Zapisz())
	{
		asortyment.WypiszBledy();
	}
}

Drugi tworze tak samo tylko ma inne cechy

{
	var wl = new WlasciwoscAsortymentu();
	asortyment.Dane.WlasciwosciAsortymentu.Add(wl);
	wl.LP = 1;
	wl.Wlasciwosc = wlasciwosci.Dane.Wszystkie().Where(w => w.Id == 100001).FirstOrDefault();
	wl.CechyAsortymentu.Add(cechy.Dane.Wszystkie().Where((w) => w.Id == 100011).FirstOrDefault());
}

{
	var wl = new WlasciwoscAsortymentu();
	asortyment.Dane.WlasciwosciAsortymentu.Add(wl);
	wl.LP = 2;
	wl.Wlasciwosc = wlasciwosci.Dane.Wszystkie().Where(w => w.Id == 100000).FirstOrDefault();
	wl.CechyAsortymentu.Add(cechy.Dane.Wszystkie().Where((w) => w.Id == 100010).FirstOrDefault());
}

 

image.thumb.png.bc3bef761d8fa572158fac247168e16c.png

 

 

Link to postu
Cytat

WlasciwoscAsortymentu kolorAsortymentu = asortyment.Dane.WlasciwosciAsortymentu.First(w => w.Wlasciwosc.Nazwa == "Kolor");
System.InvalidOperationException: „Sekwencja nie zawiera pasującego elementu.”

Być może właściwość nie ma nazwy "Kolor", lecz ma taki symbol? Czy wyszukanie właściwości po identyfikatorze zamiast po nazwie również jej nie znajduje?
 

Cytat

Drugi tworze tak samo tylko ma inne cechy

Proszę spróbować jeszcze po zmianie cech wywołać na metodę asortyment.WygenerujNazweWariantu().

Edytowane przez Mateusz Matuszewski
literówka
Link to postu

Wygeneruj nazwę pomogło,

natomiast z tym przypisywaniem cech jest coś nie tak, raz zadziałało i miałam pisać że obie wersje działają ale teraz po kilku próbach nagle przestało działać i jest ten sam błąd.

 

Czy z tym sposobem gdzie robię new WlasciwoscAsortymentu() jest coś nie tak , czy może tak zostać?

Link to postu

Pani sposób powinien być OK. Dziwi mnie natomiast fakt, że przestaje działać, ponieważ przy ustawianiu modelu zawsze przepisywane są wszystkie jego właściwości do asortymentu. Mogłaby Pani sprawdzić czy w kolekcji WlasciwosciAsortymentu znajdują się wszystkie właściwości modelu w momencie, gdy przestaje działać? A może jakaś cecha nie jest przypisana do właściwości (w słowniku Właściwości) i dlatego nie działa?

Link to postu
  • 2 tygodnie później...
×
×
  • Dodaj nową pozycję...