我正在学习c#,我以前使用Unix / C编程 - Oracle,最近我正在学习做Windows编程。
因为在c#(或至少使用MVC)中,数据或数据库表被表示为对象/类。
例如,一个简单的计算机商店零件跟踪;一个商店可以购买一台电脑并将其拆分成零件,然后他们可以出售这些零件;或者零件也可以单独从供应商处购买。 在关系数据库中,我们可以有像
这样的东西Table: Computers
Fields: ComputerId, Maker, PONumber, SerialNumber, DismantleFlag
Table: Parts
Fields: PartId, ComputerId, PONumber, PartDescription, SerialNumber
如果商店想要跟踪它们所在的部分,我们使用部件序列号查询部件表,如果computerId为null,则获取使用PONumber从中购买部件的详细信息,如果computerId不为null然后使用计算机表中的PONumber。
所以如果我们使用模型表示来做同样的事情,我认为它会像这样。 (我知道语法不正确,它只是一种表示)
class Part
{
properties PartId, PONumber, PartDescription, SerialNumber
}
class Computer
{
properties ComputerId, Maker, PONumber, SerialNumber, DismantleFlag
List<Part>Parts
}
所以我假设将有一个零件列表的对象来存储单独购买的所有零件,并且还有列表计算机的对象,如果DismantleFlag为Y,则列表计算机内部的零件列表。
这意味着如果我想要执行相同的操作来跟踪部件,我必须通过部件列表对象,我还需要查看计算机对象列表以及我需要扫描的每个计算机对象通过计算机对象中的所有部分?
如果我的理解是正确的,那么关系数据库更容易存储和管理数据,以及如果数据/模型没有以对象形式表示,它将如何在MVC中翻译?
谢谢。
答案 0 :(得分:0)
通常在asp.net-mvc中,您的数据实际存储在关系数据库中,您使用像Entity Framework这样的框架将sql查询的结果转换为模型表示。
实体框架还支持LINQ,后者使用更类似Sql的语法。因此,如果您使用EF,类似的查询可能如下所示。
// in practice, we might put this in a using statement
var db = new MyDbContext();
var qry =
from p in db.Parts
join c in db.Computers on p.ComputerId equals c.ComputerId
where p.SerialNumber == mySerialNumber
select c.PoNumber
string poNumber = qry.FirstOrDefault();
现在,您实际上想要的查询可能会使用左连接。 linq中的左连接语法有点时髦,但它至少可以使用
var qry =
from part in db.Parts
join ljcomp in db.Computers on part.ComputerId equals ljcomp.ComputerId into gcomp
from comp in gcomp.DefaultIfEmpty()
where part.SerialNumber == mySerialNumber
select comp == null ? part.PoNumber : comp.PoNumber
在幕后,EF将您的linq查询转换为sql,并针对数据库执行它,然后可以将其转换为您的字符串值,甚至可以将其转换为对象,如果这是您要求它选择的对象。
您没有 使用实体框架,您可以通过其他方式与数据库进行通信,但是现在我将这项研究作为练习留给您。< / p>
答案 1 :(得分:0)
在模型 - 视图 - 控制器(MVC)中。创建模型的方式不同(这是您要创建的用于存储数据的类)。有Code First和Entity框架数据库的第一种方法
这是一个实体框架数据库第一个方法示例http://www.c-sharpcorner.com/UploadFile/8ef97c/mvc-5-0-application-using-entity-framework-db-first-approach/
希望这有帮助
答案 2 :(得分:0)
我假设您的方案中可以使用以下规则:
计算机和零件将是完全独立的实体。 计算机和零件之间的关系将是多对多的。
这是我根据上述规则创建的基本模型结构。
ComputerParts表中的布尔值当前表示更清楚 关系船是当前的关系(如果在这台计算机或 如果部分不再驻留在此计算机中,则为false)此方法允许 几乎任何可以想象的计算机与零件关系。
这些类是最基本的模型,可能会被修改 如果你在使用像Entity Framework这样的ORM。希望这有帮助
public class Computers
{
public string ComputerID { get; set;}
public string Maker { get; set;}
public string PONumber { get; set; }
public string SerialNumber { get; set; }
public Boolean DimantleFlag { get; set; }
public DateTime DateCreated { get; set; }
}
public class Parts
{
public string PartID { get; set; }
public string PONumber { get; set; }
public string SerialNumber { get; set; }
public string PartDescription { get; set; }
public DateTime DateCreated { get; set; }
}
public class ComputerParts
{
public string ComputerID { get; set; }
public string PartID { get; set; }
public Boolean Current { get; set; }
public DateTime DateCreated { get; set; }
}