C# 如何将EF6实体传递到不同服务器上的新页面

C# 如何将EF6实体传递到不同服务器上的新页面,c#,asp.net,C#,Asp.net,我正在开发一个web应用程序(使用webForms而不是mvc),它接受用户输入并将其添加到数据库表中。此应用程序将可供开发、质量保证和生产环境中的用户使用,每个环境都有自己的数据库 目前,我有一个升级按钮,通过从Dev连接到QA数据库或从QA连接到Prod数据库插入/更新那里的数据,然后重定向到应用程序的QA/Prod版本 我不想这样做,而是想将myEntity保存在一个变量中,并用重定向发送它。我是这样想的: MyEntityType myEntity = UserInputData();

我正在开发一个web应用程序(使用webForms而不是mvc),它接受用户输入并将其添加到数据库表中。此应用程序将可供开发、质量保证和生产环境中的用户使用,每个环境都有自己的数据库

目前,我有一个升级按钮,通过从Dev连接到QA数据库或从QA连接到Prod数据库插入/更新那里的数据,然后重定向到应用程序的QA/Prod版本

我不想这样做,而是想将myEntity保存在一个变量中,并用重定向发送它。我是这样想的:

MyEntityType myEntity = UserInputData();
Response.Redirect("myQAurl", myEntity);
然后在我的QA页面中,加载类似于:

If( fromDev ){
    loadPageWithMyEntity();
}
通过这种方式,我希望可以防止QA/Prod数据库直接从dev-->QA或QA-->Prod连接

如果传递实体无效,我也可以使用数组、列表等进行重定向:

Response.Redirect("myQAurl", myEntity);
其工作方式是服务器基本上告诉浏览器对提供的URL发出GET请求。这意味着通过该重定向发送的任何信息都必须位于该URL上的查询字符串中。所以你有两个选择:

  • 在查询字符串中包含一组键/值对,可用于在另一端重新构造实体
  • 将实体序列化为字符串,并使用一个键/值对作为值,然后反序列化到另一端的实体
  • 如果实体很大,这可能会有问题。在大多数web服务器中,URL的大小都有一个合理的限制

    对于大型实体,要真正从一个系统转移到另一个不共享任何后端的系统,您可能需要一个POST请求。这不能通过重定向来完成。相反,您将向用户显示一个表单(可以完全隐藏和不可见,因此不必显示),用户必须发布该表单(可以使用JavaScript完成,因此用户不必发布该表单)


    除此之外,您可能还需要考虑后端切换,例如将数据存储在一个系统上的临时数据库位置,然后在另一个系统上使用它。

    重定向中的任何数据都需要位于查询字符串中。能否将查询字符串上的实体表示为一组键/值对?或者可能是JSON序列化版本的实体,然后由接收页面反序列化?我的实体中有40多个字段(我知道很多,但我不是DB管理员),因此将它们放在查询字符串中并不理想。此外,数据还包括密码。也许我可以使用json序列化,我是否需要连接到服务器以传递json对象,或者是否有方法使用目标url?如果序列化对象,则该字符串将是查询字符串键/值对中的值。当然,它必须是URL编码的。接收它的端点需要将它从字符串反序列化到实体。请注意,这可能会使大型实体的URL非常长,这可能会有问题。如果实体那么大,那么您可能需要将其放在页面的表单字段中,并使用JavaScript从浏览器发出POST请求,因为重定向对POST不起作用。至于密码。。。为什么一开始就要用这种方式发送呢?现在还没有用这种方式发送,如果这不是一个好主意,可能也不会。这些都是在内部网中完成的,虽然密码是“密码”,但它们并不能真正保护高价值的内容。它们只是允许贸易伙伴访问特定于他们的目录,以删除edi文档。用户密码首先不应以任何可检索的方式存储。您应该永远无法读取它们,并且系统在任何时候都不应该输出它们(即使是以哈希形式)。被保护的内容的价值是否低并不重要。人们有很强的重复使用密码的倾向。很可能您当前正在存储某人的银行密码,而您不应该能够读取该密码。