使用C#/实体框架将查询从一个实体重定向到另一实体

能力

我想找出一个难题。我正在使用一个系统,在该系统中,数据库中保存了许多公司记录。这些记录中有一些是重复的,不再需要/不需要。但是,几个外部系统仍在映射到这些无效的记录。如果我们要完全删除它们,则将导致仍然希望获取该公司详细信息的系统出错。我想要的理想工作流程是:

外部系统查找公司IDX。

当前系统有一个表,其中包含所有重新映射的记录的记录,因此当请求进入时,该表指定将公​​司ID X重定向到公司IDY。

有许多端点可以一个接一个地更改以完成此操作-但是这很耗时,而且还会导致很多重复。

我的问题是,使用Entity Framework和.Net-是否有实现此工作流程的明智方法?

我最初的想法是对公司对象的构造函数做一些事情,如果存在“重定向”,它将从EF重新填充该对象,但是我不知道这对导航属性是否会起到很好的作用。有人有主意吗?

非常感谢。

耶尔达·库曼加利耶夫(Yeldar Kurmangaliyev)

您可以为同一张表创建带有外键的列,以表示单个唯一有效的公司。

例如,您可以添加DuplicateOf列:

ALTER TABLE [Company] 
    ADD COLUMN [DuplicateOf] bigint NULL, 
    FOREIGN KEY [DuplicateOf] REFERENCES [Company] ([Id]);

并在您的代码中表达这种关系:

public class Company
{
    // ...

    public Company DuplicateOf { get; set; }

    // May be useful, hides check for duplicate logic:
    public bool IsDuplicate => DuplicateOf != null;

    // May be useful as well, 
    // returns the non-duplicate uniue company, not a duplicate, either linked or current:
    public Company EffectiveCompany => DuplicateOf ?? this;
}

EffectiveCompany当您要使用非重复项时,必须寻址,并维护此列以始终指向正确的记录。如果已加载,也会导致其他查询。

另一个想法是拥有一个存储过程 GetCompany(bigint id)该存储过程将返回有效记录(如果DuplicateOf存在),否则返回自身记录。这将对您的外部系统有益,并将使您将所有这些东西隐藏在存储过程的抽象层后面。如果您决定将来进行更改,则可以轻松更新它而不会破坏外部系统。
但是,对于您来说,使用带有EF的存储过程并不总是很方便。

无论如何,这些只是想法,而不是最佳解决方案。
在我看来,最好的解决方案是摆脱重复,到处更新数据,并永远忘记这些重复数据。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

实体框架。将值从一个实体类插入到另一个实体类

将数据从一个实体子网格复制到另一个实体子网格

实体框架6.2从一个DbContext复制许多副本到另一个DbContext

JPA-将一个实体Update / Delete语句重定向到镜像表

实体框架将主键定义为另一个实体的外键

实体框架 - 将一个类的记录插入到另一个“相同”对象中

实体框架 REST 端点以获取具有另一个实体的所有实体

使用实体框架将新插入的记录 ID 更新到另一个表

使用一个DBContext在实体框架中执行多个Linq到实体查询仅连接一次到数据库

C# 如何将实体框架实体与 ObservableCollection 一起使用

根据另一个联接的实体字段值查询一个实体

从另一个列表更新列表-实体框架

使用实体框架从一个数据库故障转移到另一个数据库的一般模式?

使用htaccess将网址从一个域重定向到另一个域

尝试将一个实体与另一个实体关联会导致插入

从一个实体到多个实体的核心数据关系

最后一个实体的实体框架循环依赖

实体框架核心集null实体的一个属性

是否可以在单个查询中将映射实体选择到另一个映射实体中?

在 Protege 上将实体从一个本体复制到另一个本体时的依赖关系

如何使用Dcotrine冲洗一个实体而不冲洗另一个实体?

将实体框架从MVC移至另一个项目会导致重新迁移

将输入从一个端子重定向到另一端子

通过另一个实体的关系查找实体

教义实体扩展另一个实体

C#-一个接口,两个实现:如何将方法调用从一个实现重定向到另一个?

Symfony2获取另一个实体中一个实体的实体

将一个实体的数据添加到另一实体Coredata

使用实体框架在一个存储过程中插入、更新、删除查询