5

Utknąłem gdzieś w mojej aplikacji ASP.NET MVC 3. tu jest błąd otrzymuję:Obsługiwane są tylko inicjalizatory, elementy encji i właściwości nawigacji jednostki. (ASP.NET MVC i Entity Framework)

Podany członkiem typu „AccommPropertyTags” nie jest obsługiwany w LINQ do podmiotów. Obsługiwane są tylko opcje inicjalizujące, elementy encji i obiekt .

znalazłem w jaki sposób możemy rozwiązać to w poniższym artykule:

Only initializers, entity members, and entity navigation properties are supported

Ale mój jest trochę dziwne.

Oto jeden z częściowej klasy mojego jednostki:

[MetadataType(typeof(AccommPropertyWebDetail.MetaData))] 
public partial class AccommPropertyWebDetail { 

    public virtual ICollection<string> AccommPropertyTags { 

     get { 

      return Helpers.AccommPropertyTag.CreateStringListFromString(this.PropertyTags); 
     } 
    } 

    private class MetaData { 

     [Required, StringLength(50)] 
     public string Category { get; set; } 

    } 
} 

Jak widać powyżej, AccommPropertyTags nieruchomość jest typeof ICollection<string>. Co staram się wewnątrz mojego kontrolera jest następująca:

public ViewResult Tag(string tag) { 

    var _rawTag = HttpUtility.UrlDecode(tag); 

    ViewBag.Tag = _rawTag; 

    var model = _accommpropertyrepo.GetAllAccommPropertiesFullWebIgnoringApprovalStatus(); 

    model = model.Where(
      x => x.AccommPropertyTags.Any(
        y => y == _rawTag 
       ) 
     ); 

    return View(model); 
} 

Ze względu na fakt, że używam Any tam, Entity próbuje przekonwertować AccommPropertyTags właściwość SQL i nie mogę, ponieważ nie jest częścią schematu tabeli.

Naprawdę utknąłem tutaj czy jest jakiś fajny sposób na pokonanie tego denerwującego błędu?

Odpowiedz

10

Twój problem jest podobny do pytania, które połączyłeś. Zadzwoń pod numer model.ToList() przed użyciem Where. Zmusi to EF do zmaterializowania bytów, a następnie zastosuje resztę filtrowania w pamięci.

public ViewResult Tag(string tag) { 

    var _rawTag = HttpUtility.UrlDecode(tag); 

    ViewBag.Tag = _rawTag; 

    var model = _accommpropertyrepo.GetAllAccommPropertiesFullWebIgnoringApprovalStatus(); 

    var result = model.ToList().Where(
      x => x.AccommPropertyTags.Any(
        y => y == _rawTag 
       ) 
     ); 

    return View(result); 
} 
Powiązane problemy