代码之家  ›  专栏  ›  技术社区  ›  Aeptitude

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

  •  1
  • Aeptitude  · 技术社区  · 6 年前

    这有点让我费解。 我正在开发一个系统,在这个系统中,我们在数据库中保存了许多公司记录。其中一些记录是重复的,不再需要。 但是,一些外部系统仍在映射到这些无效记录。如果我们完全删除它们,这将导致系统错误,仍然想得到该公司的详细信息。 我想要的理想工作流程是:

    外部系统查找公司ID X。

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

    有许多端点可以一个接一个地改变来完成这项工作——但这将是非常耗时的,也会导致大量重复。

    我的问题是,使用实体框架和.NET-是否有一种实现此工作流的智能方法?

    我最初的想法是对company对象的构造函数做些事情,如果存在“重定向”,它会从ef重新填充对象,但我不知道这是否对导航属性有好处。 有人知道吗?

    非常感谢。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Yeldar Kurmangaliyev    6 年前

    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)