首先,在Entity Framework 6代码中,我可以将哪些属性添加到我的C#对象模型中,以获得1-1父/子关系,而基础SQL表关系是1到多?
数据分为所有客户共有的数据和SQL Server 2012中特定客户的数据。
它有三个实体,一个WarehouseBase基础实体,WarehouseCustom客户特定数据和一个客户实体。
C#对象:
Warehouse
{
public Guid ID {get;set;}
public string Name {get;set;}
public string Note {get;set;} //customer specific data
}
Customer
{
public Guid ID {get;set;}
public string Name {get;set;}
}
客户用户将使用此工作流程:
管理员可以编辑和保存WarehouseBase数据(名称),但不能保存客户特定数据。
SQL表:
WarehouseBase
ID : Guid
Name: Nvarchar (255)
WarehouseCustom
ID : Guid
WarehouseBaseID: GUID
CustomerID : GUID
Note : Nvarchar (255)
Customer
ID : Guid
Name : Nvarchar (255)
系统有多个不同的并发客户使用Web浏览器前端连接到WebAPI服务器。服务器使用EF6 / C#来访问SQL Server。
可以为C#模型添加哪些属性?
已经看过:
答案 0 :(得分:0)
c#应该是
Warehouse {
public Guid ID {get;set;}
public string Name {get;set;}
public ICollection<WarehouseCustom> CustomersNotes {get; set;}
}
Customer {
public Guid ID {get;set;}
public string Name {get;set;}
public ICollection<WarehouseCustom> WarehouseNotes {get; set;}
}
WarehouseCustom {
public Guid ID {get;set;}
public string Note {get;set;} //customer specific data
public virtual Warehouse {get; set;}
public virtual Customer {get; set;}
}
因此,客户可以访问仓库中的所有笔记,仓库管理员可以访问所述仓库中的所有笔记。
为了防止客户在仓库的客户备注中导航,您必须注意数据的具体化。
using (AppContext ctx = new AppContext()) {
return ctx.Customers.
Include(x => x.WarehouseNotes.Select(y => y.Wharehouse)).
Where(x => x.ID == oneID).
ToList();
}
那就是:不要使用懒散的装载。
在代码示例中,您只加载客户应该看到的内容。
理想情况下,tou应使用DTO类型。
BTW:您不需要Warehousecustom的ID(如果您可以为一个仓库提供多个客户备注,则为execpt)。您可以使用由仓库ID和客户ID组成的复杂密钥。
恕我直言,这最后一个约束将强制你命名为1对1的关系。