我在同一个解决方案中有两个项目,我想知道在AMS和Asp.Net网站之间共享数据库的理想方式是什么。此外,由于它们都使用某种实体框架,我发现在项目之间保持模型同步很棘手。
创意1:简单地让他们使用相同的连接字符串;但是如果我在一个项目中使用代码优先迁移,而另一个无法更新,因为它的迁移历史落后了呢?
创意2:不要让Asp.Net网站触及数据库;让它通过HTTP请求与AMS进行通信;但是这会为通信增加额外的网络开销吗?
创意3:创建一个单独的项目来包含所有实体框架类和DbContext
,让两个项目都引用它。但是由于AMS项目需要EntityData
类而不是POCO,因此在其他项目中重用模型类会给我带来难以想象的麻烦。我安装了所有移动服务nuget包后,我就不能让网站启动。
有什么想法?
答案 0 :(得分:1)
对你的问题只有一些想法,
创意1:当你预先进行EF迁移时,会给你带来麻烦。每个项目中的模型可能最终会有所不同,EF不会喜欢这样。最好远离这个解决方案。
创意3:我倾向于在不太使用的项目中使用,并且没有不经常更新的大型代码库。创建一个包含所有EF上下文和迁移的数据层项目,然后在多个域层或前端层中引用此数据层。这非常有效,可以为您保持简单。移动服务通过RESTful API公开数据库实体,因此不会有太多麻烦。网站应使用DTO并查看模型以在层之间移动数据。我对此解决方案的唯一问题是,当您在一个项目中更新EF模型时,您还必须更新并发布第二个项目,因为EF模型已更改。为了解决这个问题,我已经自动化了构建和发布流程,只是为了让流程更容易管理。考虑解决方案的使用寿命,最终可能会出现项目数据模型不同的情况,最终在一个数据库中有两个数据模型。如果必须随身携带数据,稍后将这些分割成两个数据库可能会非常痛苦。
想法2:在更复杂的情况下,我正在处理大型项目并不断更新代码库,项目将持续到可预见的未来,最好使用界面分离两个服务(赢得了不经常更改并删除对共享数据库的直接依赖。你可以建议将数据存储在AMS中,然后通过网站的REST请求访问它。流量可能会增长,以后可能会出现问题,具体取决于您的网站和移动服务的需求,这可能会减慢您对网站的响应时间。虽然最初,我的关注点是从站点到移动服务界面的多跳,然后再返回到您的站点的响应时间。虽然您应该能够通过缓存读取数据来缓解这种影响,但不是写入数据。在您的情况下,为了简化部署,我会做的是将网站和移动服务整合到一个解决方案中,并将组合的网站和API一起托管在Azure网站上,共享一个数据层含有EF。因此,如果您不需要,请不要使用移动服务,具体取决于当然的要求。 ASP.NET可以很好地支持两者。这有点超出了您的问题的范围,但对于您当前的问题可能有用。