“基于对象”的sql数据库的良好微服务模式

时间:2018-05-07 19:28:33

标签: c# entity-framework rest microservices

我们有一个基于SQL server和win32中间层的遗留应用程序。现在,我正在寻找良好的解决方案来编写基于REST的微服务API,以提供对数据的访问。我们喜欢使用VS,C#或JS和azure。 该应用程序的一个特点是,数据库具有不常见的“基于对象”的方法。每个实体,比如人,文件,组,文章都与共同的“对象”表有关系。在此表中存储了公共属性。还有常见的1-n相关表,如类别。每个“对象”都有一个独特的指南。

person      -->
file        -->   object   ---> objectcategories
article     -->            

新的api应提供如下方法:

GET /person/1 ->
{
    lastname: "Doe", prename: "John", sex: "m",
    guid: "{guid}", owner: "123",  // object specific attributes
}

GET /file/1 -> 
{
    filename:"test.docx", size:"123",
    guid: "{guid}", owner: "123",  // object specific attributes
}

GET /object/{guid-a} -->
{
    // Returns either file or Person data
}

它还应该允许加载其他数据,如

GET /person/1?categories ->
{
    lastname: "Doe", prename: "John", sex: "m",
    guid: "{guid}", owner: "123",  // object specific Attributes
    categories: [
         "green", "blue"
    }
}

反过来说,简单地保护一个物体会很酷。服务器必须将数据分离到相应的表。

PUT /object/{guid} <--
 {
    lastname: "Doe", prename: "John", sex: "m",
    guid: "{guid}", owner: "123",  // object specific Attributes
    categories: [
         "green", "blue"
    }
}

什么是好模式?实体框架(数据库优先)可以这样做吗?你会找一个基于linq-sql的手动解决方案吗?是否有其他合适的库用于此任务?

1 个答案:

答案 0 :(得分:1)

听起来您正在使用的数据库是以一种易于直接映射到您在业务逻辑中使用的对象的方式存储信息。

如果您正在尝试创建一个.net网络微服务,使您能够存储和检索此旧数据库中的信息,我建议使用像EntityFramework这样的ORM映射表(数据库优先)或Code-First from Database)。

然后我建议您将Repository Pattern与实体一起使用,以最大限度地提高可测试性并隔离数据层。