![]() |
1
39
我使用奈杰尔的方法(从
我已经为
更多详情请点击此处:
|
![]() |
2
26
由于EF6.1中的新功能,这个答案现在已经过时: mapping between table types 先去那儿!
NB有计划 improve the Metadata API EF Code First Mapping Between Types & Tables |
![]() |
3
6
不,不幸的是,使用元数据api无法获取给定实体的表名。 这是因为映射元数据不是公共的,所以无法使用EF的api从C-Space转到S-Space。 如果你 需要这样做的话,您可以通过解析MSL自己构建映射。这不是为胆小的人准备的,但它应该是可能的,除非你正在使用 QueryViews (这是非常罕见的),在这一点上,它对于所有意图和目的都是不可能的(您必须解析ESQL。。。啊!) 亚历克斯·詹姆斯 微软。 |
|
4
6
http://nigelfindlater.blogspot.com/2010/04/how-to-delete-objects-in-ef4-without.html 技巧是将IQueriable强制转换为ObjectQuery并使用ToTraceString方法。然后编辑生成的sql字符串。它可以工作,但你需要小心,因为你绕过了EF为保持依赖性和矛盾而建立的机制。但出于表演的原因,我认为这样做是可以的。。。。 玩得高兴。。。 奈杰尔。。。
|
![]() |
5
5
here 并对其进行了一些改进(去掉First()和Single()之类的内容,将它们转换为Where()和SelectMany()之类的内容并返回模式名)。 这适用于EF6.1+
|
![]() |
6
4
如果您将T4模板用于POCO类,则可以通过更改T4模板来获得它。请参阅代码段:
|
![]() |
7
4
如果要在EF6中执行codefirst,只需向dbcontext类添加如下内容。
|
![]() |
8
3
…然后解析SQL,这应该非常简单。 |
![]() |
9
3
下面是我使用LINQ to XML所能想到的。代码还获取列名的映射。
|
![]() |
10
3
更好的方法是使用元数据中的StoreItemCollection。这家伙已经提供了一个使用它的例子: Get Tables and Relationships |
![]() |
11
3
EF 6.1,代码优先:
|
![]() |
12
3
|
![]() |
13
2
这是另一种查找表名的方法。这有点奇怪,但管用。
|
![]() |
14
2
|
![]() |
15
2
在使用时为特殊情况添加另一个答案 显式地告诉EF要使用哪个表名。例如,如果您有:
您可以轻松访问
那就是
即用方法:
|
![]() |
16
1
这里是一个版本,假设您有上下文,并且在内存中有一个选定的实体,您需要为其找到真正的表名。 public static class ObjectContextExtentions { public static string TableNameFor(this ObjectContext context, ObjectStateEntry entry) { var generic = context.GetType().GetProperties().ToList().First(p => p.Name == entry.EntityKey.EntitySetName); var objectset = generic.GetValue(context, null); var method = objectset.GetType().GetMethod("ToTraceString"); var sql = (String)method.Invoke(objectset, null); var match = Regex.Match(sql, @"FROM\s+\[dbo\]\.\[(?<TableName>[^\]]+)\]", RegexOptions.Multiline); if (match.Success) { return match.Groups["TableName"].Value; } throw new ArgumentException("Unable to find Table name."); } } |
|
17
1
实际上,我也遇到过同样的问题,我已经生成了一个抽象的代码片段,其中给出了两个
当然,你可以增加对数据类型的检查,顺便说一句,这会迫使你编写非常复杂的代码。 损益表 P、 对不起,我是个lambda迷
|
![]() |
18
1
如果您只想快速而肮脏地获取表名(并且在应用程序代码中不需要它),可以查看为Model.edmx生成的XML。在edmx:Mappings部分找到您的实体,行:MappingFragment StoreEntitySet=“your table name”将给出表的实际名称。 |
![]() |
19
0
|
![]() |
20
0
使用EF5和一个很小的o位反射,如下所示应该可以做到这一点:
叫它像这样:
|
![]() |
21
0
把我对另一个问题的答案抄过来。 如果有人还在找,我就是这么做的。这是DBContext的扩展方法,它接受类型并返回物理列名及其属性。 这利用对象上下文获取物理列列表,然后使用“PreferredName”元数据属性将每个列映射为其属性。 因为它使用对象上下文,所以它启动数据库连接,因此第一次运行将取决于上下文的复杂性。
要使用它,只需创建一个helper静态类,并添加上面的函数;然后它就和调用
|
![]() |
22
0
它先为数据库工作。
|
![]() |
23
0
在使用EntityFrameworkCore2.0+的情况下,可以使用提供的API轻松获取关系元数据。
您需要安装Microsoft.EntityFrameworkCore.Relational Nuget包才能使用 方法。 |
![]() |
Pravin Satav · 导出用于版本控制的数据库对象 10 年前 |