gpt4 book ai didi

entity-framework-4 - Entity Framework 简单通用 GetByID 但具有不同的 PK 名称

转载 作者:行者123 更新时间:2023-12-03 13:36:02 24 4
gpt4 key购买 nike

有人可以帮助我创建一个通用的 GetByID 方法,这里的挑战是我有很多实体,每个实体都有不同的 PK 名称。

我看到几个使用通用 GetByID 的示例,但其中许多具有相同的 PK 名称,例如 (id)。

谢谢。

最佳答案

这是为具有单个属性键的实体构建存储库的基本存储库类的示例。 GetByKey 方法独立于键名称或类型。

using System;
using System.Data;
using System.Data.Metadata.Edm;
using System.Data.Objects;
using System.Linq;

namespace EntityKeyTest
{
// Base repository class for entity with simple key
public abstract class RepositoryBase<TEntity, TKey> where TEntity : class
{
private readonly string _entitySetName;
private readonly string _keyName;

protected ObjectContext Context { get; private set; }
protected ObjectSet<TEntity> ObjectSet { get; private set; }

protected RepositoryBase(ObjectContext context)
{
if (context == null)
{
throw new ArgumentNullException("context");
}

Context = context;
ObjectSet = context.CreateObjectSet<TEntity>();
// Get entity set for current entity type
var entitySet = ObjectSet.EntitySet;
// Build full name of entity set for current entity type
_entitySetName = context.DefaultContainerName + "." + entitySet.Name;
// Get name of the entity's key property
_keyName = entitySet.ElementType.KeyMembers.Single().Name;
}

public virtual TEntity GetByKey(TKey key)
{
// Build entity key
var entityKey = new EntityKey(_entitySetName, _keyName, key);
// Query first current state manager and if entity is not found query database!!!
return (TEntity)Context.GetObjectByKey(entityKey);
}
// Rest of repository implementation
}
}

使用此代码时有一个骗局。如果您不使用从 ObjectContext 派生的生成类,而是直接使用 ObjectContext,则必须手动设置模型使用的 DefaultContainerName

编辑:

此方法适用于经典 EF。如果需要,我可以考虑代码优先的版本。

关于entity-framework-4 - Entity Framework 简单通用 GetByID 但具有不同的 PK 名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5273416/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com