Cast () - Ausnahme: LINQ to Entities unterstützt nur casting EDM primitive oder enumerationstypen

Möchte ich etwas zeigen Entität namens CriminalEvent in eine Allgemeine MVC-Ansicht, die ich schrieb. Die Sicht erfordert, dass das Modell übergeben ihm obliegt die Ausführung der IDataModel - Schnittstelle. Jetzt CriminalEvent hat die Eigenschaften, um diese Schnittstelle zu implementieren, aber unter einem anderen Namen und ich kann es nicht ändern.

Also in meinem code, den ich geerbt CriminalEvent und meine abgeleitete Klasse (auch als CriminalEvent, dumm, aber ich Schätze, erlaubt es mir, zu vermeiden, viele code-änderungen...) hat explizite interface-code:

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; }
    }
}

(Ich weiß, in diesem Fall die Schnittstelle die ID-Eigenschaft ist gleich CriminalEventID, es ist Ok)

Erwartet, dass ich in der Lage sein zu Lesen der AIM.Police.DB.CriminalEvent Personen und Auffüllen meiner Ansicht Modell von Linq to Entities-Cast()ing Sie an die abgeleitete CriminalEvent wie diese:

View-Modell (brauche ich zum Auffüllen der CriminalEvents Eigenschaft):

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; }
}

und der Controller-code:

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);
}

Beachten Sie, dass die original - CriminalEvent Klasse und die InvestigationContext gefunden werden, in das ZIEL.Polizei.DB-dll, die ich nicht berühren kann

Den Fehler:

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.

Warum erhalte ich diese Fehlermeldung?
Bemerkungen zu meiner Vorgehensweise sind immer willkommen..

InformationsquelleAutor user1707621 | 2013-12-31

Schreibe einen Kommentar