【发布时间】:2020-02-26 13:10:52
【问题描述】:
问题1:
之前我们使用的是WebApi+SqlServer,现在我们想迁移到WebApi+Cosmos DB。
早期实现(WebApi+SqlServer):
1. 我们创建了一个 Employee 模型,该模型将映射到来自 UI 的对象(此处为邮递员)
2. 稍后我们将在 WebApi 中对该模型进行验证。
3. 接下来,该模型将映射到 DatabaseEmployee(SQL server) 实体并插入到 SQL server。
新实现(WebApi+CosmosDB -SQL API+DocumentDB):
1. 上面的Step1和Step2也会在这里完成
2.这里是不是也需要创建一个DatabaseEmployee实体,或者直接向CosmosDB插入数据,不需要将Employee模型映射到DatabaseEmployee模型?
注意:
我认为:
a) 一对一映射:无需创建 CosmosDB 实体(DatabaseEmployee)。
b) 一对多映射:我们应该创建一个 CosmosDB 实体(DatabaseEmployee)。
c) 多对多映射:我们应该创建一个 CosmosDB 实体(DatabaseEmployee)。
问题 2:
对于一对多映射,请考虑以下示例 2 表 Employee 和 Department:
员工:EmpID、姓名、地址
部门:DeptID、DeptName、EmpId
在 SQL Server 中,我们有外键约束,因此我们可以维护 2 个表。
在 Cosmos DB 中,我们是否需要创建 2 个不同的容器,否则 1 个容器就足够了,如下所示?
{
DeptId:101,
DeptName: "XXX",
EmpData:
{
EmpId: 101,
Empname:"AAA"
},
{
EmpId: 102,
Empname:"BBB"
}
}
如果一个容器就足够了,那么我的 UI 模型必须如下:
Public class Department
{
public int DeptId {get;set;}
public string Deptname {get;set;}
public List<Employee> EmpData {get;set;}
}
但我们有类似的模型:
public class Employee
{
public int EmpId {get;set;}
public string EmpName {get;set;}
}
public class Department
{
public int DeptId {get;set;}
public string DeptName {get;set;}
public int EMpId {get;set;} ** ForeignKey constraint as per SQL server **
}
注意:
如何在 WebApi 中维护模型以及如何创建类似于 CosmosDB 容器的数据库实体?
【问题讨论】:
-
为什么要迁移到 CosmosDB?与 SQL Server 等传统关系数据库相比,CosmosDB 使用不同的数据库范例,例如,可能不适合将 Cosmos 用于 OLAP 工作负载。
标签: c# asp.net-mvc asp.net-web-api azure-cosmosdb azure-cosmosdb-sqlapi