【发布时间】:2016-10-19 22:32:26
【问题描述】:
我有多个项目通过 API 端点返回相同的 OData 实体。现在我想调用所有项目并将它们存储在带有实体框架的调用项目数据库中。
要将它们添加到数据库中,ID 会被覆盖,但我也想保存实体在项目数据库中的 ID。所以如果需要我仍然可以访问它们并检查数据是否已经在我的数据库中。因此,我需要向实体添加另一个 MainProjectID 和 projectID 列。
我尝试创建一个新类,该类引用了我要保存的实体,但这使用了实体的新 ID。我也尝试过继承该类,但这给了我关键的冲突问题,并且泛型在实体框架中也不起作用(我不是说它们应该)。所以我现在有点不知所措。
我基本上想将 id 保存为非键。有什么办法可以在不编写全新的类并手动解析它们的情况下做到这一点?
任何帮助将不胜感激。
【问题讨论】:
-
“覆盖”是指在 DB 上它们被处理为 auto_increment 列并且原始值丢失了吗?如果是这样,请看一下:stackoverflow.com/questions/7206273/…
-
是的,但我仍然不能使用 id 的原始值作为键,因为它们可能在项目之间相互冲突。因为它们并非都来自相同的 dB。而且由于实体基本上都将被放入同一个表中,因此 id 将发生冲突。
-
那既然你尝试了继承和引用,我猜你不能修改实体类?
-
如有必要,我可以,但我宁愿不仅为聚合添加任何值。因为这对我来说似乎是糟糕的设计(仅为聚合添加字段)。但如有必要,这是可能的。
-
我正在考虑可能将 id 和 projectname 一起用作主键。然后像你说的那样关闭自动增量。我明天试试。
标签: c# asp.net entity-framework asp.net-web-api2 odata