说,我有一个包含像这样的自定义属性的部分类
public partial class Person {
public string ImagePath{get;set;}
}
我正在使用ExecuteStoreQuery<Person>
来提取数据,其中执行的存储过程通过Person.ImageId = Image.ImageId
连接 Person 和 Image 从 Image 表中获取 ImagePath 字段。
这似乎不适用于部分类,但完全适用于继承。
但是,我不想在这种情况下使用继承类,所以...... EF是否可以知道部分类的属性并在执行executestorequery时填充它们?
答案 0 :(得分:2)
没有。如果Person
类已映射,则实体EF在EDMX文件中使用您的映射,它将仅填充映射属性,因为部分类中的所有自定义属性都不是映射的一部分。
作为一种解决方法,创建一个不会映射的新类PersonView
。添加与结果集中的列同名的所有属性,并在ExecuteStoreQuery
中使用它。在这种情况下,EF没有EDMX中新类的映射,因此它将推断最简单的映射 - 它将按名称对列和属性进行配对。
答案 1 :(得分:1)
我知道这有点老了但我刚刚遇到这个问题并找到了解决方法,请看下面的方法:
public IList<Person> GetPerson()
{
var mod = (from p in Person
join i in Image on p.ImageId equals i.ImageId
select new
{
p.Name,
i.ImageId,
i.ImagePath
}).ToList();
return (from m in mod
select new Person
{
Name = m.Name,
ImageId = m.ImageId,
ImagePath = m.ImagePath
}).ToList();
}
答案 2 :(得分:0)
public partial class PersonList: Person
{
public string ImagePath { get; set; }
}
List<PersonList> myList = (
from p in db.Person
join i in db.Images on p.ref_image equals i.id
select new PersonList()
{
id = p.id, name = p.name, ImagePath = i.path
}
).ToList<PersonList>();
Console.Write(myList[0].id.ToString() + ", " +
myList[0].name + " (" + myList[0].ImagePath + ")");