如何在Entity框架中填充部分实体的自定义属性

时间:2012-03-26 02:02:30

标签: asp.net entity-framework

说,我有一个包含像这样的自定义属性的部分类

public partial class Person {
    public string ImagePath{get;set;}
}

我正在使用ExecuteStoreQuery<Person>来提取数据,其中执行的存储过程通过Person.ImageId = Image.ImageId连接 Person Image Image 表中获取 ImagePath 字段。

这似乎不适用于部分类,但完全适用于继承。

但是,我不想在这种情况下使用继承类,所以...... EF是否可以知道部分类的属性并在执行executestorequery时填充它们?

3 个答案:

答案 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 + ")");