Bùi*_*ành 4 .net c# linq reflection entity-framework
我使用.NET实体框架.我想将属性从一个EntityObject复制到另一个EntityObject.但System.Type.GetProperties()似乎不返回在分部类上定义的属性.
码:
在Visual Studio生成的XXX.edmx/XXX.Designer.cs中,我有类MyTable:
public partial class MyTable: EntityObject{..}
Run Code Online (Sandbox Code Playgroud)
我想为MyTable类添加一些属性,所以我添加文件XXX.Manual.cs:
public partial class MyTable: EntityObject{
public string myProp{get;set;}
}
Run Code Online (Sandbox Code Playgroud)
但myTableObj.GetType().GetProperties()不包含myProp !!!
如何使用反射获取myProp?
[编辑]我想评论Alex回答,但不知道为什么代码部分没有格式化.
是的,这很奇怪.我使用此代码将实体中的属性复制到另一个obj:
public static void CopyTo(this EntityObject Entity, EntityObject another){
var Type = Entity.GetType();
foreach (var Property in Type.GetProperties()){
...
Property.SetValue(another, Property.GetValue(Entity, null), null);
}
}
//in some other place:
myTableObj.CopyTo(anotherTableObj);
Run Code Online (Sandbox Code Playgroud)
其中myTableObj和anotherTableObj的类型为MyTable.
当调试到CopyTo方法时,VS显示实体和另一个是MyTable类型,我可以看到Entity.myProp,另一个.myProp
但foreach语句中的Property var根本不会循环到myProp属性!
[编辑]抱歉.上面的代码(CopyTo方法)是来自diamandiev的另一个问题的答案的副本
但他的代码是错误的:"break"语句必须替换为"continue":D
首先,部分类就是如何拆分源代码.它不会影响编译的程序集.
您可能不会看到myProp属性,因为myTableObj它不是类型MyTable.
试试这个:
var property = typeof(MyTable).GetProperty("myProp");
Run Code Online (Sandbox Code Playgroud)
[编辑]
刚检查过:
EntityObject x = new MyTable();
var property1 = typeof(MyTable).GetProperty("myProp");
var property2 = x.GetType().GetProperty("myProp");
Run Code Online (Sandbox Code Playgroud)
无论property1和property2归还的财产.
[编辑]
试过你的代码,经过小修改后就可以了:
public static void CopyTo(EntityObject fromEntity, EntityObject toEntity)
{
foreach (var property in fromEntity.GetType().GetProperties())
{
if (property.GetSetMethod() == null)
continue;
var value = property.GetValue(fromEntity, null);
property.SetValue(toEntity, value, null);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7143 次 |
| 最近记录: |