使用实体框架的C#中的通用存储库

伊姆兰·艾哈迈德·沙希德(Imran Ahmad Shahid)

我想通过提供主键数组来检索多个记录,并且必须对所有实体都采用通用方法。

private DbSet<TEntity> _entities;
      /// <summary>
            /// Get entity by identifier
            /// </summary>
            /// <param name="id">Identifier</param>
            /// <returns>Entity</returns>
            public virtual TEntity GetById(object id)
            {
                return Entities.Find(id);
            }




 /// <summary>
        /// Get entity by identifier
        /// </summary>
        /// <param name="id">Identifier</param>
        /// <returns>Entity</returns>
        public virtual List<TEntity> GetByIds(int id[])
        {
               // want to make it generic
            return Entities.Where(x=>id.Contains(id));
        }

    /// <summary>
        /// Gets an entity set
        /// </summary>
        protected virtual DbSet<TEntity> Entities
        {
            get
            {
                if (_entities == null)
                    _entities = _context.Set<TEntity>();

                return _entities;
            }
        }

这里的问题是我的实体没有ID列,例如,产品具有ProductId,订单具有OrderId。我不想将数据库列更改为ID。

Entities.Where(x=>id.Contains(id));

我希望我的实体列与现在相同。如何使用这种数据库结构实现通用搜索方法以查找多个记录?

伊万·斯托夫

您可以使用EF Core提供的元数据服务(例如FindEntityTypeFindPrimaryKey)来获取PK属性名称。然后,您可以使用另一个EF Core提供的有用方法EF.Property,使用它来访问LINQ to Entities查询中的PK值

像这样:

public virtual List<TEntity> GetByIds(int[] ids)
{
    var idName = _context.Model.FindEntityType(typeof(TEntity))
        .FindPrimaryKey().Properties.Single().Name;
    return Entities
        .Where(x => ids.Contains(EF.Property<int>(x, idName)))
        .ToList();
}

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

数据未使用通用存储库和实体框架 5.0 保存在数据库中

C#实体框架核心和存储库

如何使用实体框架从 C# 中的存储过程中获取输出值

网络核心:实体框架中通用存储库主ID的关键性能

.Net Core中的通用存储库模式与实体框架有什么关系

默认情况下,渴望通过通用存储库中的实体框架加载所有内容

.Net核心实体框架通用存储库模式-使用UnitOfWork实现共享服务

在C#中使用实体框架在datagridview中显示数据库中的数据

实体框架通用存储库,包括通过参数的属性

使用实体框架的最小存储库实现

C#实体框架和存储过程

C#实体框架,获取插入的ID(通用)

如何使用实体框架将RichTextBox内容存储到WPF中的SQLServer数据库中

如何使用组合主键在工作空间实体框架的存储库模式单元中插入/删除记录

在实体框架存储库中使用选择器

实体框架6,我应该使用存储库模式吗?

在实体框架的存储库类中使用 DbContext

如何在 C# 和 WPF 中的实体框架中创建数据库和表?

使用LINQ的C#实体框架

使用带OData feed C#的存储过程的自定义分页,不带实体框架

实体框架C#

无法从数据库实体框架C#中删除记录

无法使用实体框架 c# web api 连接到我的数据库

List <任务>-使用C#实体框架的UPSERT数据库记录

使用实体框架和存储库模式在SQLite和SQL Server数据库中同时进行数据操作

.NET / C#库项目实体框架app.config

如何在C#中的存储库中设置某些实体属性?

多个实体的通用JPA存储库

具有相关实体的通用存储库