Некоторые вопросы о .NET Entity Framework и хранимых процедурах - PullRequest
2 голосов
/ 27 мая 2010

Привет всем, у меня было несколько вопросов, касающихся .NET Entity Framework и использования хранимых процедур. Здесь идет:

  1. Я знаю, что мы можем щелкнуть правой кнопкой мыши хранимую процедуру и выбрать функцию «Импорт», чтобы иметь возможность использовать ее с кодом. Есть ли способ сделать это для многих хранимых процедур одновременно?

  2. При выполнении импорта функций я могу создать новый сложный тип или использовать существующий сложный тип. Хорошо, как я могу получить доступ к Сложным типам / объектам, которые находятся вне файла EDMX? То есть, если у меня есть класс в моем проекте, возможно ли получить к нему доступ при выполнении импорта функций?

  3. При вызове хранимой процедуры из кода она возвращает IEnumerable сложного типа, который я установил как. Однако иногда эти сложные типы не имеют всех необходимых мне свойств, поэтому я создаю новый класс в своем проекте, который наследует от сложного типа, используемого в хранимой процедуре. Проблема в том, что я не могу привести сложный тип, возвращенный из хранимой процедуры, к новому классу, который я создал. Есть причина, почему я не могу этого сделать? В итоге я перебрал IEnumerable и добавил каждый элемент в новый список созданного мною класса. Но это выглядит и выглядит грязно.

Бар

1 Ответ

2 голосов
/ 27 мая 2010
  1. Возможно, я неправильно понимаю, но в вашей модели вы можете right-click> Update Model from Database. На вкладке Add просто выберите все хранимые процедуры, которые вы хотите добавить в модель.

  2. Не так, как я знаю. Смысл Entity Framework состоит в том, чтобы не создавать ваши сущности вручную (генерация кода). Вы сначала создаете базу данных и копируете в модель, либо сначала создаете модель и генерируете таблицы базы данных. В любом случае фактические сущности .NET создаются автоматически. Если вы позже измените свою модель, сущности будут заново сгенерированы. Если бы вы могли импортировать свои собственные ранее существующие объекты, вы рискуете перезаписать их при изменении вашей модели. Они также будут вне контроля модели (как обращаться, если они находятся в отдельных сборках и т. Д.?). С частичными объектами (подробнее об этом на # 3) вы можете расширять сгенерированные классы, не рискуя переписать ваши настройки. Вы по-прежнему можете использовать существующие классы как DTO , но тогда вам придется вручную преобразовывать сгенерированную EF сущность в ваш объект DTO.

  3. Нельзя привести базовый класс к производному классу. См .: Способ приведения базового типа к производному типу

Я не уверен насчет .NET 3.5 (EF 1), но сущности / сложные типы в .NET 4 (EF 2) являются частичными классами. Это означает, что вы можете добавлять членов, просто расширяя класс. Так, например, если ваш пользовательский тип был:

public partial class Address
{
  public string Address1 { get; set; }
  public string Address2 { get; set; }
  public string City { get; set; }
  public string State { get; set; }
  public string Zip { get; set; }
}

Вы можете создать новый файл с:

public partial class Address
{
  public string MyProperty { get; set;}
}

Тогда сделайте new Address { Address1 = "abc", MyProperty = "def" };. Они оба должны быть в одной сборке и в одном пространстве имен.

...