gpt4 book ai didi

c# - Entity Framework 和 DbSet

转载 作者:太空狗 更新时间:2023-10-29 20:42:01 26 4
gpt4 key购买 nike

我正在尝试设置一个通用接口(interface)来从存储库中检索实体。问题是我需要从 WCF 服务请求数据,而据我所知,泛型不适用于操作契约(Contract)。

所以我有这个可以在控制台应用程序中工作,而不是使用服务调用:

public virtual List<T> GetAll<T>() where T : MyBaseType
{
return this.datacontext.Set<T>().Include(l => l.RelationshipEntity).ToList();
}

我能看到 dong 的唯一方法是这样的:

public virtual List<MyBaseType> GetAll(Type entityType)
{
return this.datacontext.Set(entityType).Include(l => l.RelationshipEntity).ToList();
}

Set<T>()Set(Type type)都返回 DbSet但是,Set(Type type)没有使用 ToList() 的扩展名,我也没有得到我所有的结果。

Local属性仅显示当前执行范围内的上下文,而不是存储库中包含的内容。

所以我想要一个这样的 WCF 契约(Contract):

[ServiceContract]
public interface IRulesService
{
[OperationContract]
MyBaseType Add(MyBaseType entity);

[OperationContract]
List<MyBaseType> GetAll(Type type);
}

然后执行:

public virtual List<MyBaseType> GetAll(Type entityType)
{
var dbset = this.datacontext.Set(entityType);
string sql = String.Format("select * from {0}s", type.Name);

Type listType = typeof(List<>).MakeGenericType(entityType);
List<MyBaseType> list = new List<MyBaseType>();

IEnumerator result = dbset.SqlQuery(sql).GetEnumerator();

while (result.MoveNext()){
list.Add(result.Current as MyBaseType);
}

return list;
}

//public virtual List<T> GetAll<T>() where T : MyBaseType
//{
// return this.datacontext.Set<T>().Include(l => l.RelationshipEntity).ToList();
//}

public virtual MyBaseType Add(MyBaseType entity)
{
DbSet set = this.datacontext.Set(typeof(entity));
set.Add(entity);
this.datacontext.SaveChanges();
return entity;
}

//public virtual T Add<T>(T t) where T : MyBaseType
//{
// this.datacontext.Set<T>().Add(t);
// this.datacontext.SaveChanges();
// return t;
//}

public virtual List<MyBaseType> UpdateAll(List<MyBaseType> entities)
{

}

有什么想法是最好的方法吗?

最佳答案

您应该可以调用 Cast<T>扩展方法。

public virtual List<MyBaseType> GetAll(Type entityType)
{
return this.datacontext.Set(entityType)
.Include(l => l.RelationshipEntity)
.Cast<MyBaseType>() // The magic here
.ToList();
}

关于c# - Entity Framework 和 DbSet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15070874/

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