2014-02-14 1 views
0

Я метода следующий репо:Не удается получить мои отношения метод хранилища работать

public class EFX_YRelationshipRepository : IX_YRelationshipRepository 
{ 

    private EFDbContext context = new EFDbContext(); 

    public IQueryable<X_YRelationship> Relationships 
    { 
     get 
     { 
      return context.X_Ys; 
     } 
    } 

    public IQueryable<X> GetAsByYID(int yID) 
    { 
     IQueryable<X>xs = 
      from x in context.Xs 
      join r in Relationships on c.XID equals r.XID 
      join y in context.Ys on r.YID equals y.YID 
      where y.YID == yID 
      select new X(); 

     return xs; 
    } 
    ... 

Я зову его из моего контроллера:

public ActionResult ListByY(int yID, int page = 1, string sort = "Name", bool desc = false) 
    { 
     IEnumerable<X> xsByY = xRelationshipRepository.GetXsByYID(yID); 

     ListViewModel<X> model = new ListViewModel<X> 
     { 
      Items = xsByY 
       .Skip((page - 1) * PageSize) 
       .Take(PageSize), 
      PagingInfo = new PagingInfo 
      { 
       CurrentPage = page, 
       ItemsPerPage = PageSize, 
       TotalItems = xsByY.Count(), 
       Sort = sort, 
       Desc = desc 
      } 
     }; 
     return View("_List", model); 
    } 

Я получаю ошибку:

The entity or complex type 'Something.Domain.Concrete.X' cannot be constructed in a LINQ to Entities query. 

для линии:

Line 79:    ListViewModel<X> model = new ListViewModel<X> 

Что я делаю неправильно?

Боковые ноты:

public class EFDbContext : DbContext 
{ 
    public DbSet<Y> Ys { get; set; } 
    public DbSet<X> Xs { get; set; } 
    public DbSet<X_YRelationship> Xs_Ys { get; set; } 
} 

КОНТЕКСТ:

Контекст этого вопроса является то, что у меня есть 3 таблицы базы данных: Xs Ys и X_Ys (это таблица отношения кстати)

Я хочу иметь список Xs, которые были связаны с Y ... Так что я сделал 3 dbSets и отношения reposi который содержит функцию, которая будет делать это.

Этот репозиторий имеет один dbContext ... и функция просто должна вернуть эти Xs на мой контроллер, чтобы я мог подтолкнуть их к моему представлению.

ответ

0

Вы выбираете пустой экземпляр X вместо подходящего объекта.
Изменения выбора двухрядного для: select x;

Edit: Вы не должны использовать присоединяется к траверс отношений, вместо того, чтобы использовать внешние ключевые свойства ваших сущностей (предполагая, что 1-на-1 отношение):

IQueryable<X>xs = context.Xs 
    .Where(x => x.Relationship.Any(r => r.Any(y => y.YID == yID))) 
+0

Я получаю: Недопустимое имя объекта 'dbo.X_YRelationship'. Я добавил дополнительную информацию к исходному вопросу, включая класс EFDbContext и метод отношений моего репозитория. – Jimmyt1988

+0

Отредактированный мой ответ ... –

+0

К вашему ответу у меня есть существующая база данных, которую я просто планирую с помощью классов ... База данных (SQL) имеет внешние ключи, но не внутри самих классов. Мои отношения также много для многих ... Я действительно хотел бы использовать объединения. – Jimmyt1988

Смежные вопросы