Как заполнить пользовательские свойства частичной сущности в платформе Entity - PullRequest
2 голосов
/ 26 марта 2012

скажем, у меня есть частичный класс, который содержит пользовательское свойство, подобное этому

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

и я использую ExecuteStoreQuery<Person> для извлечения данных, где выполняется хранимая процедура, которая объединяет Person и Image на Person.ImageId = Image.ImageId и получает ImagePath поле из изображения таблицы.

Кажется, это не работает для частичного класса, но идеально подходит для наследования.

Однако я не хочу использовать наследующий класс в этом случае, так что ... возможно ли в EF знать о свойствах частичного класса и заполнять их при выполнении executetestorequery?

Ответы [ 3 ]

2 голосов
/ 26 марта 2012

Нет. Если класс Person является сопоставленной сущностью, EF использует ваше сопоставление в файле EDMX и заполняет только сопоставленные свойства, поскольку ни одно из ваших пользовательских свойств из частичного класса не является частью вашего сопоставления.

В качестве обходного пути создайте новый класс PersonView, который не будет отображен. Добавьте все свойства с тем же именем, что и столбцы в наборе результатов, и используйте его в ExecuteStoreQuery. В этом случае EF не имеет сопоставления для нового класса в EDMX, поэтому он выведет простейшее сопоставление - он объединит столбцы и свойства по имени.

1 голос
/ 15 мая 2014

Я знаю, что это довольно старая проблема, но я только сейчас столкнулся с этой проблемой и нашел обходной путь, см. Метод ниже:

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();
}
0 голосов
/ 22 ноября 2016
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 + ")");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...