Loading...
Dominik avatar Dominik 82 Точки

[Homework] DB Apps - Processing JSON in .NET ( Problem 1. Product Shop)

Здравейте,

Ще може ли някои да обясни как става мапването на 2 полета от една таблица (Product в случая) към друга таблица (Users) чрез Code First? До момента успявам да мапна само едното поле другото ми го игнорира/презаписва ... Ето какво представлява класа ми с контекста http://pastebin.com/60ruazZv Не знам дори дали това е начина по който се прави нещо такова просто това му хрумна.

 

2
Databases Basics
a_rusenov avatar a_rusenov 1103 Точки

При User-Product релацията няма нужда да мапваш с Map(). HasMany(...).WithMany() е напълно достатъчно за Entity Framework да си извърши мапинга правилно. Евентуално накрая е добре да сложиш .WillCascadeOnDelete(false), за да забраниш каскадното триене, понеже може да ти се скара с ексепшън.

1
25/07/2015 21:43:47
p.yordanov avatar p.yordanov 51 Точки

Здравей,

Аз също имах проблем с мапването, само че на мен ми правеше вместо 2 ключа между продукти и юзъри - 4. Не успях да се преборя с мапването, но реших проблема като използвах InverseProperty.

Тук можеш да ми видиш класовете User и Product

Product.cs - http://pastebin.com/qR5uwdy0

User.cs - http://pastebin.com/LQkJ5RJe

7
Dominik avatar Dominik 82 Точки

Благодаря колега,

И аз го направих по подобен начин една идея по-сложен от твоя проблема ми идваше от там, че се опитвах с едно колекция от продукти да направя всичко ... laugh.

1
26/07/2015 16:47:52
nedjo avatar nedjo 53 Точки

Колега, ще може ли да споделиш как от сеедваш юзерите. Изваждам си информацията от xml файла, и с цикъл правя си обект от тип User наливам текущият юзер в него и го въвеждам в context.Users. Всичко си минава нормално докато не дам SaveChanges() и exception - http://www.megafileupload.com/dg42/exception.png

А това  е моят код: http://pastebin.com/fFuvfg3d

0
Dominik avatar Dominik 82 Точки

Здравей колега,

Аз по този начин импортвам юзърите от хмл файла - http://pastebin.com/6XDqK09S 

Не е най оптималният, но това ми дойде на ъкъла онзи ден :)

0
a.angelov avatar a.angelov 1316 Точки

/OFF Добре, че видях темата, бях написал домашното по условията на това от миналия випуск... smileyfrown

0
zh.stoqnov avatar zh.stoqnov 103 Точки

Здравейте колеги!

За да не отварям друга тема - да ви помоля някой би ли споделил как реши на 3та задача 2ро и 4то query - аз доста зациклих там и реших да се обърна към вас.

0
dim4o avatar dim4o 288 Точки

В SoldProducts какво държиш? Всички продукти с BayerId != null ли?

0
a.angelov avatar a.angelov 1316 Точки

dim4o,

SoldProducts е колекция в User и държи всички продукти, на които BuyerId-то е равно на id-то на съответния user.

1
veselinsavov avatar veselinsavov 219 Точки

Към екипа, мисля, че трябва да се оправят 2 неща в домашното:

На първа задача: Users have an id, first name (optional) and last name (at least 3 characters) and age Добавете, че Age e optional или в user.xml добавете на всички user-и и age.

Трета задача четвърта под точка примерната таблица: users-and-products.json => users-and-products.xml

0
a_rusenov avatar a_rusenov 1103 Точки

Оправено, благодарим за сигнала. :)

0
dimityr.jechev avatar dimityr.jechev 198 Точки

А аз да попитам как сте Seed-нали данните от json,че аз не мога нещо да се се справя?

0
aivian avatar aivian 51 Точки

Възможно ли е, за четирите примера, да се пишат query - та, които пращат по една заявка (както е по условие)? Понеже, при мен, на първа, заради Where ми изпраща повече от една, същото и на втора, и на трета заради групирването.

0
a_rusenov avatar a_rusenov 1103 Точки

Може с една заявка и това е идеята. Пусни си твоите заявки да видим защо генерира N+1.

0
29/07/2015 17:26:04
aivian avatar aivian 51 Точки

http://pastebin.com/6EFhtXuQ

0
a_rusenov avatar a_rusenov 1103 Точки

Не виждам нещо от заявките ти, което би направило N+1. Най-вероятно виждаш други заявки в профайлъра, затова:

  1. Още в началото направи заявка context.Products.Count(), колкото да се направи връзка към базата и да се извърши синхронизация между модел и таблици
  2. За да си максимално сигурен, че се праща 1 заявка сложи breakpoint точно преди да материализираш заявката и изчисти профайлъра.
0
VenelinGrozev avatar VenelinGrozev 130 Точки

Наско, би ли разяснил тази точка от условието - Leave out some products that have not been sold (i.e. buyer is null).

Когато се опитам да вкарам null в buyerId колоната гърми грешка

Cannot insert the value NULL into column 'BuyerId', table 'ProductsShop.dbo.Products'; column does not allow nulls. INSERT fails.

Предполагам, че това е понеже има релация към таблица Users (Users.Id - Products.BuyerId). Условието ли е грешно или аз не съм доразбрал нещо?

0
a_rusenov avatar a_rusenov 1103 Точки

Ами то си го пише в ексепшъна, BuyerId не позволява null, понеже в модела ти не е nullable. :)

0
VenelinGrozev avatar VenelinGrozev 130 Точки

:) Верно че го пише, просто не се изразих както трябва. Бях направих в модела BuyerId да е int? но в OnModelCreating бях оставил следното

modelBuilder.Entity<Product>()
            .HasRequired(p => p.Buyer)
            .WithMany(u => u.Buyers)
            .HasForeignKey(p => p.BuyerId)
            .WillCascadeOnDelete(false);

Компилатора като види HasRequired прави колоната да не дава да се вкарват nulls и оттам вече тръгна цялата история. Благодарности на a.angelov, че ми отвори очите. Като го промених на HasOptional си тръгна без грешки.

Тъй като не можах да се сетя каква е причината реших, че условието е грешно и затова попитах. :)

0
31/07/2015 11:26:44
Hristo_Penchev avatar Hristo_Penchev 389 Точки

На диаграмата на домашното е показана таблица с връзки много към много, като и двете сочат към User. Реално не се ли получава същото ако на юзър сложим селф-релция едно към много? Всеки юзър си има сет от приятели. Виждам смисъл от много към много релация единствено ако се вкара някаква логика, според която ако Пешо е приятел с Гошо, то и Гошо да е приятел с Пешо, съответно ако в междинната таблица се вкара връкза 3-5, автоматично да има и 5-3

0
30/07/2015 12:24:43
Petar_Belberov avatar Petar_Belberov 41 Точки

Ако може някой да обясни как да сийдна xml файла - users, че вече зациклих...

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.