EF中,如何获取一个实体所对应的数据表名?

wapit 2013-03-07 03:07:30
比如实体这么定义的:
public class A_Abc

或者这么定义的:
[Table("A_Abc")]
public class Abc

以上,我想得到"A_Abc"的字符串,即实体对应的表名,怎么办? 谢谢!
...全文
4464 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
三五月儿 2013-03-29
  • 打赏
  • 举报
回复
public static void Main() { //获取当前执行代码的程序集 Assembly assem = Assembly.GetExecutingAssembly(); Console.WriteLine("程序集全名:"+assem.FullName); Console.WriteLine("程序集的版本:"+assem.GetName().Version); Console.WriteLine("程序集初始位置:"+assem.CodeBase); Console.WriteLine("程序集位置:"+assem.Location); Console.WriteLine("程序集入口:"+assem.EntryPoint); Type[] types = assem.GetTypes(); Console.WriteLine("程序集下包含的类型:"); foreach (var item in types) { Console.WriteLine("类:"+item.Name); } } 上这里看看http://www.cnblogs.com/lmfeng/archive/2011/08/11/2134863.html
a157147899 2013-03-26
  • 打赏
  • 举报
回复
引用 9 楼 wapit 的回复:
引用 8 楼 a157147899 的回复:如果是自定义了 TableAttribute属性,用反射即可获取。 如果是DataBaseFirst,就只能通过Edmx的MetaData来获取了 对,我就是想这样,然后做成一个通用的方法,即根据类取表名,如果有TableAttribute,就用反射取,没有,则判断为DatabaseFirst方式,通过Edmx的MetaDa……
2楼版主给的链接就是具体代码了 http://www.cnblogs.com/Allen-Li/archive/2012/04/25/2470157.html 这个博主是在微软中国做EF技术支持的。
a157147899 2013-03-25
  • 打赏
  • 举报
回复
如果是自定义了 TableAttribute属性,用反射即可获取。 如果是DataBaseFirst,就只能通过Edmx的MetaData来获取了
wapit 2013-03-25
  • 打赏
  • 举报
回复
引用 8 楼 a157147899 的回复:
如果是自定义了 TableAttribute属性,用反射即可获取。 如果是DataBaseFirst,就只能通过Edmx的MetaData来获取了
对,我就是想这样,然后做成一个通用的方法,即根据类取表名,如果有TableAttribute,就用反射取,没有,则判断为DatabaseFirst方式,通过Edmx的MetaData取…… 有无取MetaData数据的具体代码?谢谢
chdphhdhzhhdhz 2013-03-15
  • 打赏
  • 举报
回复
在Map类里面,设置this.ToTable("A_Abc"); 就可以
wapit 2013-03-13
  • 打赏
  • 举报
回复
引用 3 楼 q107770540 的回复:
本帖最后由 q107770540 于 2013-03-07 09:44:59 编辑 C# code?1234567891011121314151617181920212223242526272829303132333435using System.Data.Linq.Mapping; class Program { st……
试过了,这种对于定义了:[Table(Name = "MyAbc")]这种类可能有效,但对于DataBaseFirst方式,即采用edmx中定义的类,无法取到Table属性。 继续求解……
夜色镇歌 2013-03-13
  • 打赏
  • 举报
回复
反射
threenewbee 2013-03-10
  • 打赏
  • 举报
回复
引用 3 楼 q107770540 的回复:
本帖最后由 q107770540 于 2013-03-07 09:44:59 编辑 C# code?1234567891011121314151617181920212223242526272829303132333435using System.Data.Linq.Mapping; class Program { st……
正解,反射,取attribute,不但可以取表名,而且可以取任何attribute。
q107770540 2013-03-07
  • 打赏
  • 举报
回复

using System.Data.Linq.Mapping;

class Program
{
static void Main(string[] args)
{
string name = typeof(Abc).GetAttributeValue((TableAttribute dna) => dna.Name);
Console.WriteLine(name);

Console.Read();
}
}

public static class AttributeExtensions
{
public static TValue GetAttributeValue<TAttribute, TValue>(
this Type type,
Func<TAttribute, TValue> valueSelector)
where TAttribute : Attribute
{
var att = type.GetCustomAttributes(
typeof(TAttribute), true
).FirstOrDefault() as TAttribute;
if (att != null)
{
return valueSelector(att);
}
return default(TValue);
}
}

[Table(Name = "MyAbc")]
public class Abc
{
}
EnForGrass 2013-03-07
  • 打赏
  • 举报
回复
得到真正的数据库表的名称,用Metadata获取(假如你程序的表名和你数据库表名不一样呢) 参考http://www.cnblogs.com/Allen-Li/archive/2012/04/25/2470157.html
ruanwei1987 2013-03-07
  • 打赏
  • 举报
回复
Abc.GetAttribute("Table").Value A_Abc.GetType().GetClassName

8,497

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 LINQ
社区管理员
  • LINQ
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧