Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >实体框架4-按ID检索实体的通用方法

实体框架4-按ID检索实体的通用方法
EN

Stack Overflow用户
提问于 2011-03-27 09:09:56
回答 3查看 3.5K关注 0票数 1

我正在编写通过ID获取单个实体的方法:

代码语言:javascript
运行
AI代码解释
复制
public Customer GetCustomer(int i_CustomerID)
{
  return (from c in context.CustomerSet 
         where c.Id == i_CustomerID 
        select c).SingleOrDefault();            
}

public Movie GetMovie(int i_MovieID)
{
  return (from m in context.MovieSet 
         where m.Id == i_MovieID 
        select m).SingleOrDefault();
}

但是我有很多实体,并且这段代码会重复执行。我想写一个这样的方法:

代码语言:javascript
运行
AI代码解释
复制
public T GetEntityByID<T>(int i_EntityID)
{
  return (from e in context.T_Set 
         where e.Id == i_EntityID 
        select e).SingleOrDefault();
}

有没有办法做到这一点?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-03-27 09:26:28

我实际上并没有执行这个代码,但是它会编译,并且很可能是您想要实现的东西:

代码语言:javascript
运行
AI代码解释
复制
    public static void Testing()
    {
        SelectEntity<MyObject>(r => r.MyObjectId == 1);
    }

    public static T SelectEntity<T>(Expression<Func<T, bool>> expression) where T : EntityObject
    {
        MyContext db = new MyContext();
        return db.CreateObjectSet<T>().SingleOrDefault(expression);
    }
票数 3
EN

Stack Overflow用户

发布于 2011-03-27 09:26:07

问题是,没有通用的超类型具有您所寻求的相关属性。然而,使用EF正在使用的内置T4代码生成工具来生成fetch方法是很容易的。这里有一个很好的链接,告诉你如何钩住并生成你所需要的代码。

http://msdn.microsoft.com/en-us/data/gg558520

票数 1
EN

Stack Overflow用户

发布于 2011-03-27 11:45:54

如果您知道您的泛型存储库将始终与具有相同名称和相同类型的PK的实体类型一起使用,那么您可以简单地定义如下接口:

代码语言:javascript
运行
AI代码解释
复制
public interface IEntity
{
    int Id { get; }
}

或者在部分生成的实体中实现此接口,或者修改T4模板以自动包含它。然后,您的存储库将定义为:

代码语言:javascript
运行
AI代码解释
复制
public interface IRepository<TEntity> where T : IEntity
{
    ...
}

如果主键类型可以改变,但名称仍然不变,则可以将实体接口改进为:

代码语言:javascript
运行
AI代码解释
复制
public interface IEntity<TKey> 
{
    TKey Id { get; set; }
}

存储库的定义为:

代码语言:javascript
运行
AI代码解释
复制
public interface IRepository<TEntity, TKey> where TEntity : IEntity<TKey>
{
    ...
}

如果你想要通用存储库,它能够处理具有不同PK名称和类型的实体,请检查this answer。该解决方案可能也适用于复合PKs (或稍加修改)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5448250

复制
相关文章
Python学习笔记:第2天while循
while循环是先判断给的条件是否为真,如果真则执行循环体中的while语句,否则跳出循环;执行循环体之后再次判断条件是否为真。
py3study
2020/01/19
4960
2、while+read按行读取文件
一、三种方法 1.exec读取文件 exec <file sum=0 while read line do cmd done 2. cat读取文件 cat file|while read line do cmd done 推荐用途: 通过awk等三剑客获取文件中的数据后,可以使用这种方法用管道抛给while按行读取 3. while循环最后加重定向 while read line do cmd done<file 推荐用途: 直接按行读取文件中的内容时,推荐用此方法 二、案例 读取web日志文件
jackxiao
2021/11/16
1.7K0
pyspark之从HDFS上读取文件、从本地读取文件
hdfs上的路径: path="hdfs:///主机名:端口号/地址" 本地上的路径: path"file:///本地地址" 读取文件: rdd=sc.textFile(path)
西西嘛呦
2020/08/26
5.2K0
OpenGl 导入读取多个3D模型 并且添加鼠标控制移动旋转
  因为接下来的项目需求是要读取多个3D模型,并且移动拼接,那么我就先把基本的小demo给写好当做前期测试。
徐飞机
2019/10/08
3.2K0
OpenGl 导入读取多个3D模型 并且添加鼠标控制移动旋转
python从txt文件读取数据
  (作为一个python初学者,记录一点学习期间的笔记,方便日后查阅,若有错误或者更加便捷的方法,望指出!)
py3study
2020/01/19
4K0
python从txt文件读取数据
OpenGl读取导入3D模型并且添加鼠标移动旋转显示
原文链接:https://www.cnblogs.com/DOMLX/p/11543828.html
徐飞机
2019/09/19
2.7K0
OpenGl读取导入3D模型并且添加鼠标移动旋转显示
Rust:从嵌套循环中退出
在C语言中,我们常用goto语句来在错误条件下跳转到函数的数据清理部分。这种用法的好处尤其体现在“错误发生在嵌套循环”的时候,我们不用每一层循环都加一个标志位,逐级退出。
灯珑LoGin
2022/11/16
1.5K0
sl从程序集中读取xaml文件
 StreamResourceInfo sri = Application.GetResourceStream(new Uri("HowTo;component/Page.xaml", UriKind.Relative)); StreamReader sr = new StreamReader(sri.Stream); txtReadxml.Text = sr.ReadToEnd(); {1};component/{2} 1为程序集的名字 2为想读取的页面 page.xaml: <UserCont
用户1172164
2018/01/16
1.1K0
sl从程序集中读取xaml文件
Python Numpy 从文件中读取数据
测试文件内容(test1.txt) hello,123,nihao 8,9,10 io,he,no 测试代码 import numpy # dtype:默认读取数据类型,delimiter:分隔符 world_alcohol = numpy.genfromtxt("test1.txt", dtype=str, delimiter=",") # 数据结构 print(type(world_alcohol)) # 数据内容 print(world_alcohol) # 帮助文档 print(help(nump
山海散人
2021/03/03
4.4K0
调用opengl程序代码
// Test_of_callexe.cpp : Defines the entry point for the console application. // #include<stdafx.h> #include <windows.h> #include <stdio.h> #include <conio.h> int main(int argc, char * argv[]) { STARTUPINFO si = {0}; si.cb = sizeof(si); P
流川疯
2019/01/18
1.1K0
OpenGl 实现鼠标分别移动多个物体
原文链接:https://www.cnblogs.com/DOMLX/p/11620088.html
徐飞机
2019/10/06
2.7K0
实验5 OpenGL模型视图变换
2、移动或者旋转它,当然了,如果它只是计算机里面的物体,我们还可以放大或缩小它(物体运动,让人看它的不同部分)。(模型变换)
步行者08
2018/10/09
1.7K0
json文件的读取_c语言文件读取
JSON 是 JS 对象的字符串表示法,它使用文本表示一个 JS 对象的信息,本质是一个字符串。有关于json的相关信息,可参考:json百度百科。
全栈程序员站长
2022/11/07
5.8K0
json文件的读取_c语言文件读取
HDFS——如何从HDFS上读取文件内容
用这个命令bin/Hadoop fs -cat 可以将HDFS上的文件内容读取到控制台。
星哥玩云
2022/06/30
2.8K0
Android OpenGL 渲染图像读取哪家强?
glReadPixels 是 OpenGL ES 的 API ,OpenGL ES 2.0 和 3.0 均支持。使用非常方便,下面一行代码即可搞定,但是效率很低。
字节流动
2020/11/03
4.5K0
matlab读取mnist数据集(c语言从文件中读取数据)
mnist database(手写字符识别) 的数据集下载地:http://yann.lecun.com/exdb/mnist/。
全栈程序员站长
2022/08/01
5.1K0
matlab读取mnist数据集(c语言从文件中读取数据)
C++ 从文件读取python numpy 数组
作为示例,我们先在python中创建一个二维的numpy数组, 并写入二进制文件:
用户6021899
2020/02/26
5.8K0
C++ 从文件读取python numpy 数组
OpenGL的glPushMatrix()和glPopMatrix()矩阵栈顶操作函数详解「建议收藏」
OpenGL中图形绘制后,往往需要一系列的变换来达到用户的目的,而这种变换实现的原理是又通过矩阵进行操作的。opengl中的变换一般包括视图变换、模型变换、投影变换等,在每次变换后,opengl将会呈现一种新的状态(这也就是我们为什么会成其为状态机)。
全栈程序员站长
2022/07/23
1.5K0
OpenGL的glPushMatrix()和glPopMatrix()矩阵栈顶操作函数详解「建议收藏」
点击加载更多

相似问题

读取fread() while循环中的文件

11

opengl+glut glutPostRedisplay在哪里?

30

Python在while循环中读取文件

33

Scala在while循环中从文件中写入和读取

11

glutPostRedisplay()并不总是被调用?

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档