首页 > 解决方案 > LLBLGen 通过非主键的字段加载不同的项目

问题描述

我一直在尝试通过表中不是主键的字段从 LLBLGen 加载单个项目。

我只能弄清楚如何对 FetchEntity 的主键进行归档。

要过滤非主键,我必须获取集合并使用 linq 获取第一个。感觉有点臭,不知道有没有更好的方法?

 public BinLocationEntity GetDefaultBinLocation(string firstName, string lastName)
    {


        var persons = new EntityCollection<PersonEntity>();
        var filter = new RelationPredicateBucket();
        filter.PredicateExpression.Add(PersonFields.FirstName == firstName);
        filter.PredicateExpression.Add(PersonFields.LastName== lastName);

        using (var adapter = this.DataAccessAdapter)
        {
            adapter.FetchEntityCollection(persons , filter);
        }
        return persons .First();
    }

我知道演示代码在现实世界中会很糟糕,它只是作为示例。

标签: c#llblgenprollblgen

解决方案


您还可以通过唯一约束获取:

https://www.llblgen.com/Documentation/5.6/LLBLGen%20Pro%20RTF/Using%20the%20generated%20code/Adapter/gencode_usingentityclasses_instantiating.htm#using-a-unique-constraints-value

使用不是主键且不是唯一约束的字段(直接)获取单个实体没有多大意义。生成的代码无法知道您的查询在逻辑上应该导致返回单个实体。

在这些情况下使用 Linq .First() 是完全合适的,根本不是代码/设计的味道。


推荐阅读