Как я могу вернуть возвращаемую коллекцию в метод из запроса LINQ, который имеет отношение один ко многим?
Например, у меня есть следующий код, где я могу иметь много проектов для объекта TimeTracking. Будет ли работать тип, который я определил для возвращаемого типа (IEnumerable)? Это настроено в моей модели EF как этот особый тип отношений.
public IEnumerable<TimeTracking> GetTimeTrackings()
{
YeagerTechEntities DbContext = new YeagerTechEntities();
DbContext.Configuration.ProxyCreationEnabled = false;
DbContext.Configuration.LazyLoadingEnabled = false;
var timeTrackings = (from timeTrackingProjects in DbContext.TimeTrackings.Include("TimeTrackings.Projects")
select timeTrackingProjects).Where(p => p.TimeTrackingID > 0);
CloseConnection(DbContext);
return timeTrackings;
}
Если это так, когда я отображаю его в моем MVC 3 View, а мой View содержит модель IEnumerable<YeagerTech.YeagerTechWcfService.TimeTracking>
, будут ли переменные модели иметь записи для объектов TimeTracking и Project? Я не думаю, что это будет. Мой объект TimeTracking настраивается следующим образом, если только мне не нужно наследовать класс Project с ним (который затем будет иметь свойства Project):
public partial class TimeTracking
{
[DataMember]
public int TimeTrackingID { get; set; }
[DataMember]
public short ProjectID { get; set; }
[DataMember]
public byte[] Attachment { get; set; }
[Required]
[DataType(DataType.Date)]
[DataMember]
public System.DateTime StartDate { get; set; }
[Required]
[DataType(DataType.Date)]
[DataMember]
public System.DateTime EndDate { get; set; }
[DataMember]
public string Notes { get; set; }
[DataMember]
public System.DateTime CreatedDate { get; set; }
[DataMember]
public Nullable<System.DateTime> UpdatedDate { get; set; }
[DataMember]
public virtual Project Project { get; set; }
}
Я также хочу, чтобы в моем представлении отображался текст проекта, связанный с TimeTracking, а не значение проекта. Как я могу это сделать? Может кто-нибудь помочь?
Я получил следующее сообщение от вызова метода на моем клиенте WCF.
'невозможно сериализовать, если отслеживание ссылок отключено'
Получив сообщение, я изменил свои DataContracts, добавив ссылки ([DataContract (IsReference = true)]).
namespace YeagerTechModel
{
[Serializable]
[DataContract(IsReference = true)]
public partial class Customer
{
public Customer()
{
this.Projects = new HashSet<Project>();
}
[DataMember]
public short CustomerID { get; set; }
[Required]
[StringLength(50)]
[DataType(DataType.EmailAddress)]
[DataMember]
public string Email { get; set; }
Я выполняю следующий код на стороне сервера, чтобы успешно получить данные из моей базы данных в отношениях родитель / потомок. Простота метода «Включить» вызывает получение связанных данных проекта для конкретного Заказчика. Я должен был сделать это таким образом, потому что вы должны выключить LazyLoading, если вы хотите передавать данные своих родителей / детей по проводам.
Если я посмотрю журнал сообщений WCF, я увижу фактические данные, попадающие в объект Customer, и у него есть объект Project внутри объекта Customer.
Однако после того, как вызов сделан, и я фактически проверяю содержимое переменной customer, я не вижу ссылок на какие-либо данные проекта.
public IEnumerable<Customer> GetCustomers()
{
YeagerTechEntities DbContext = new YeagerTechEntities();
DbContext.Configuration.ProxyCreationEnabled = false;
DbContext.Configuration.LazyLoadingEnabled = false;
IQueryable<Customer> customer = DbContext.Customers.Include("Projects").Where(p => p.CustomerID > 0);
CloseConnection(DbContext);
return customer;
}
То, что я хочу сделать сейчас, это ссылаться на данные проекта, возвращаемые после вызова. Тем не менее, я не получаю intellisense объекта Customer после ввода «customer». Это все относится к объекту IQueryable.
Я передаю его обратно в контроллер MVC следующего типа:
IEnumerable<YeagerTechWcfService.Customer> customerList = db.GetCustomers();
и в моем представлении как следующая модель:
IEnumerable<YeagerTech.YeagerTechWcfService.Customer>
Теперь большой вопрос: «Как я могу ссылаться на данные проекта, возвращающиеся в моем представлении?
Ниже приведен мой код для View, но для "item.Project" отсутствует intellisense. Обратите внимание, что «Email» - это свойство внутри моего объекта Customer.
foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.Email)
</td>