0

我有两个看起来完全一样的函数,只是它们创建了两个不同对象的列表。这两个不同的对象看起来非常相似,但是当我尝试在其中一个对象上运行其中一个函数时,我收到错误消息“无法在 LINQ to Entities 查询中构造实体或复杂类型。”。有人可以用非常简单的术语向我解释发生了什么吗?另外,您能告诉我如何更改我的代码以使其正常工作吗?谢谢,艾伦。

功能1(工作):

    public static List<ChartApp> ListChartApplications()
    {
        using (var db = new LatencyDBContext())
        {
            var appNames = db.LoginApplications.Select(item => new ChartApp()
            {
                LoginApplicationID = item.LoginApplicationID,
                LoginAppName = item.LoginAppName,
            }).OrderBy(item => item.LoginAppName);
            return appNames.ToList();
        }
    }

函数 2(在“return appNames.ToList();”上抛出错误):

    public static List<LoginApplication> ListApplications()
    {
        using (var db = new LatencyDBContext())
        {
            var appNames = db.LoginApplications.Select(item => new LoginApplication()
            {
                LoginApplicationID = item.LoginApplicationID,
                LoginAppName = item.LoginAppName,
            }).OrderBy(item => item.LoginAppName);
            return appNames.ToList();
        }
    }

课程:

public class ChartApp
{
    public ChartApp()
    {
        this.LoginHistories = new List<ChartHist>();
    }

    public int? LoginApplicationID { get; set; }
    public string LoginAppName { get; set; }
    public virtual ICollection<ChartHist> LoginHistories { get; set; }
    public int Step { get; set; }
}

public class LoginApplication
{
    public LoginApplication()
    {
        this.LoginHistories = new List<LoginHistory>();
    }

    public int LoginApplicationID { get; set; }
    public string LoginAppName { get; set; }
    public virtual ICollection<LoginHistory> LoginHistories { get; set; }
}

编辑:区别可能是其中一个对象映射到数据库吗?

public class LoginApplicationMap : EntityTypeConfiguration<LoginApplication>
{
    public LoginApplicationMap()
    {
        // Primary Key
        this.HasKey(t => t.LoginApplicationID);

        // Properties
        this.Property(t => t.LoginAppName)
            .HasMaxLength(500);

        // Table & Column Mappings
        this.ToTable("LoginApplication");
        this.Property(t => t.LoginApplicationID).HasColumnName("LoginApplicationID");
        this.Property(t => t.LoginAppName).HasColumnName("LoginAppName");
    }
}
4

1 回答 1

1

在这种情况下,我的解决方案是删除非工作功能并在所有地方使用工作功能。对于映射的类似函数,我使用以下函数返回值。

    public static List<LoginEnvironment> ListEnvironments(bool allSelection)
    {
        using (var db = new LatencyDBContext())
        {
            //GET ALL THE ENVIRONMENT NAMES              
            var envNames = from e in db.LoginEnvironments
                           orderby e.LoginEnvName
                           select e;

            //PUT ALL THE ENVIRONMENTS INTO A LOCAL LIST
            var listEnv = new List<LoginEnvironment>();

            if (allSelection)
            {
                var defaultAll = new LoginEnvironment();
                defaultAll.LoginEnvironmentID = 0;
                defaultAll.LoginEnvName = "All";
                listEnv.Add(defaultAll);
            }

            foreach (var item in envNames)
            {
                var localEnv = new LoginEnvironment();
                localEnv.LoginEnvironmentID = item.LoginEnvironmentID;
                localEnv.LoginEnvName = item.LoginEnvName;
                listEnv.Add(localEnv);
            }

            return listEnv;
        }
    }
于 2013-02-21T17:48:04.710 回答