Cast() exception: LINQ to entities seulement prend en charge la conversion EDM primitive ou une énumération des types de

Je veux afficher une entité nommée CriminalEvent dans un but MVC vue que j'ai écrit. La vision exige que le Modèle de passer, il doit mettre en œuvre le IDataModel interface. Maintenant, CriminalEvent a les propriétés d'implémenter cette interface, mais sous un autre nom et je ne peux pas le changer.

Donc, dans mon code j'ai hérité de CriminalEvent et ma classe dérivée (également appelé CriminalEvent, stupide, je suppose, mais me permet d'éviter de nombreux changements de code...) explicite le code de l'interface:

Using ViewApp;
public interface IDataModel
{
    int ID { get; set; }
    int CriminalEventID { get; set; }
}

public class ViewCriminalEvent : AIM.Police.DB.CriminalEvent, IDataModel
{
    int IDataModel.ID
    {
        get { return CriminalEventID; }
        set { CriminalEventID = value; }
    }
}

(Je sais, dans ce cas, l'interface de la propriété ID est égal à CriminalEventID, c'est Ok)

Je m'attendais à être en mesure de lire les AIM.Police.DB.CriminalEvent Entités et remplir mon point de vue, le modèle par Linq to entities Cast()ing à la dérivée CriminalEvent, comme ceci:

Le modèle de vue (j'en ai besoin pour remplir le CriminalEvents la propriété):

Using ViewApp;
public class CriminalEventMainViewModel
{
    public IEnumerable<IDataModel> CriminalEvents { get; set; }
    public IDataModel SelectedEntity { get; set; }

    public string SubEntityDisplayName { get; set; }

    public IEnumerable<IDataModel> SubEntityCollection { get; set; }
    public IDataModel SelectedSubEntity { get; set; }
}

et le code du Contrôleur:

Using ViewApp;    
private ViewResult CriminalEventIndexView(CriminalEvent selectedCriminalEvent = null)
{
    CriminalEventMainViewModel viewModel =
        new CriminalEventMainViewModel();

    using (var db1 = new AIM.Police.DB.InvestigationContext(lazyLoadingEnabled: false))
    {
        viewModel.CriminalEvents = db1.CriminalEvents.Cast<ViewCriminalEvent>().ToList(); //THIS LINE THROWS THE EXCEPTION
        viewModel.SelectedEntity = selectedCriminalEvent;
    }
    return View("Index", (object)viewModel);
}

Note à la fois l'original CriminalEvent classe et la InvestigationContext sont trouvés dans le BUT.La Police.DB dll que je ne peux toucher

L'Erreur:

Unable to cast the type 'AIM.Police.DB.CriminalEvent' to type 'InvestigationSimulator.Models.CriminalEvent'. LINQ to Entities only supports casting EDM primitive or enumeration types.

Pourquoi j'ai cette erreur?
Remarques sur ma façon de faire sont toujours les bienvenus..

InformationsquelleAutor user1707621 | 2013-12-31