Diskuze: ASP.NET MVC
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Člen
Zobrazeno 13 zpráv z 13.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Jak to ale mám provést, když chci do té samé tabulky dát i admina ... vytvoří se mi i fyzicky v tabulce v DB a to já nechci ...
Odkud teda budeš tahat toho operátora?
Z tabulky Users (třída User). Myslel jsm, že udělám toto
public int AutorId { get; set; }
public virtual User Autor { get; set; }
public int OperatorId { get; set; }
public virtual User Operator { get; set; }
ale to mi do tabulky požadavků vytvoří sloupce AutorId, OperatorId a Operator. Já bych rád, aby tam byla jen ty AutorId a OperatorId...
Tak nic, asi jsem tupej, ale takhle, jak jsem to napsal v minulém příspěvku mi to najednou maká tak, jak má... Asi jsem něco před tím dělal špatně. Omlouvám se za zbytečné vlákno...
Tak teď už to vážně nechápu.
Když udělám třídu Printer
public class Printer
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity), Key()]
public int PrinterId { get; set; }
[Required(ErrorMessage = "Označení tiskárny musí být uvedeno")]
[StringLength(100, ErrorMessage = "Označení tiskárny je příliš dlouhé")]
[Display(Name = "Označení tiskárny")]
public string PrinterName { get; set; }
[Display(Name = "Barevná")]
public bool Color { get; set; }
[Display(Name = "Black toner")]
public int BlackId { get; set; }
public virtual Cartridge Black { get; set; }
[Display(Name = "Yellow toner")]
public int? YellowId { get; set; }
public virtual Cartridge Yellow { get; set; }
[Display(Name = "Cyan toner")]
public int? CyanId { get; set; }
public virtual Cartridge Cyan { get; set; }
[Display(Name = "Magenta toner")]
public int? MagentaId { get; set; }
public virtual Cartridge Magenta { get; set; }
[Display(Name = "Aktivní")]
public bool Active { get; set; }
[Display(Name = "Poznámka")]
[MaxLength()]
public string PrinterNote { get; set; }
}
tak mi to při migraci navrhne takovéto vytvoření tabulky
CreateTable(
"dbo.Printers",
c => new
{
PrinterId = c.Int(nullable: false, identity: true),
PrinterName = c.String(nullable: false, maxLength: 100),
Color = c.Boolean(nullable: false),
BlackId = c.Int(nullable: false),
YellowId = c.Int(),
CyanId = c.Int(),
MagentaId = c.Int(),
Active = c.Boolean(nullable: false),
PrinterNote = c.String(),
Black_CartridgeId = c.Int(),
Cyan_CartridgeId = c.Int(),
Magenta_CartridgeId = c.Int(),
Yellow_CartridgeId = c.Int(),
})
.PrimaryKey(t => t.PrinterId)
.ForeignKey("dbo.Cartridges", t => t.Black_CartridgeId)
.ForeignKey("dbo.Cartridges", t => t.Cyan_CartridgeId)
.ForeignKey("dbo.Cartridges", t => t.Magenta_CartridgeId)
.ForeignKey("dbo.Cartridges", t => t.Yellow_CartridgeId)
.Index(t => t.Black_CartridgeId)
.Index(t => t.Cyan_CartridgeId)
.Index(t => t.Magenta_CartridgeId)
.Index(t => t.Yellow_CartridgeId);
v podstatě ten problém, který jsem popisoval v prvním příspěvku
vlákna.
Nevíte někdo, co dělám blbě?
Ještě pro úplnost třída Cartridge
public class Cartridge
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity), Key()]
public int CartridgeId { get; set; }
//číslo toneru
[Required(ErrorMessage = "Označení toneru musí být uvedeno")]
[StringLength(50, ErrorMessage = "Označení toneru je příliš dlouhé")]
[Display(Name = "Označení toneru")]
public string CartridgeNumber { get; set; }
//popis toneru - názvy tiskáren
[StringLength(255, ErrorMessage = "Popis toneru je příliš dlouhý")]
[Display(Name = "Popis toneru")]
public string CatridgeDescription { get; set; }
//barva
[Display(Name = "Barva")]
[Required(ErrorMessage = "Barva toneru musí být uvedena")]
public string CartridgeColor { get; set; }
//skladem
[Range(0, int.MaxValue, ErrorMessage = "Stav skladu nesmí být záporný")]
[Display(Name = "Skladem ks")]
public int Stock { get; set; }
//minimální stav
[Range(0, int.MaxValue, ErrorMessage = "Minimální stav skladu nesmí být záporný")]
[Display(Name = "Minimální stav")]
public int MinStock { get; set; }
//aktivní
public bool Active { get; set; }
//rezervace
[Range(0, int.MaxValue, ErrorMessage = "Rezervace nesmí být záporná")]
[Display(Name = "Rezervováno")]
public int Resrvation { get; set; }
[Display(Name = "Poznámka")]
[MaxLength()]
public string CartridgeNote { get; set; }
}
ja ti budu reagovat. ale libit se ti to nebude..
Proč ti to píšu? protože v konfiguracich to co chces udelas jednoduse, funguje to na 100% a je naprosto pochopitelné jak to funguje:
//RequestConfiguration.cs
HasRequired(a => a.Author)
.WithMany(b=>b.AuthorInRequests)
.HasForeignKey(c=>c.AuthorId);
HasRequired(a => a.Operator)
.WithMany(b=>b.OperatorInRequests)
.HasForeignKey(c=>c.OperatorId);
a User.cs:
public virtual List<Request> AuthorInRequests {get; set;} // Requesty kde je autorem
public virtual List<Request> OperatorInRequests {get; set;} // Requesty kde je operatorem
Migrace dělám ručně, ale stejně mi přijde to MVC strašně složité... No nic, budu asi muset zůstat u webforms...
Tak toto úplně asi nesouvisí s frontendem.. To je věc dalu. Tento problém budeš mít i u webforms,..
Ale u webforms používám klasické SQL příkazy a DB tvořím ručně. Entity Framework pro mě asi není to pravé ořechové...
Entity framework by ti usnadnil život hodně (pokud se ho naučíš ovládat), ale na vše se také nehodí.
http://www.entityframeworktutorial.net/
Z tohodle se to během pár hodin naučíš..
http://www.entityframeworktutorial.net/…e-first.aspx
Ono je to easy jakmile se to naučíš.
Díky za rady, mrknu se na to, bo vím, že webforms už se vyvíjet nebudou a přechod na MVC mě bude čekat tak, jako tak (tím pádem i Entity Framework je nutností se naučit) Už se do toho snažím proniknout taaak dlouho a taaak marně...
Entity framework není nutností, na výběr máš spoustu jiných alternativ
Hmm jestli jsi takto vydeseny z MVC,.. tak az uvidis, ze soucasny svet se zene do posran*ho javascript toolingu , kterej vecne nefunguje, je pomalej jako svine a vytuhava.. tak se poseres
Zobrazeno 13 zpráv z 13.