`在此上下文错误中仅支持原始类型或枚举,而在多个字段上使用addorupdate匹配种子ASP.NET MVC



我在stackoverflow.com上的第一个问题!祝我好运:)

我正在尝试用一些测试数据播种开发数据库,需要在两个字段上匹配,并在此处遇到的问题如何用Addorupdate用EF 4.3

中的复杂键播种数据。

我得到了lukyer评论中提到的Only primitive types or enumeration types are supported in this context.错误。

但是,尽管添加了外键属性,并且正如他所建议的模型中所需的属性所需的属性,但我找不到明显的方法来清除错误。

关于如何成功地收到有关如何成功播种数据库的任何想法。

模型的重要部分如下:

public class User {
    public string ID { get; set; }
    public string Email {get; set; }
}
public class Institution {
    public Guid ID { get; set;}
    public string Name {get; set; }
}
public class UserInstitutionAssociation {
    public Guid ID { get; set; }
    public virtual User User { get; set; }
    public virtual Institution Institution {get; set;}
}

,然后从configuration.cs迁移的代码添加了一个用户(jamesbond@mi5.com)和一个机构(最高机密机构)。然后,它尝试在用户和机构之间添加关联,仅当两者之间的关联尚不存在时,才应添加它。

//Add User to Database
context.Users.AddOrUpdate(u => u.Email,
    new User {
        Email = "jamesbond@mi5.com"
    });
context.SaveContext();
//Add Institution to Database
context.Institutions.AddOrUpdate(u => u.Name,
    new Institution {
        Name = "Top Secret Establishment"
    });
context.SaveContext();
//Add Association between User and Institution
context.InstitutionUserAssociations.AddOrUpdate(u => new { u.User, u.Institution },
    new InstitutionUserAssociation
    {
        User = context.Users.Single(x => x.Email=="jamesbond@mi5.com"),
        Institution = context.Institutions.Single(x => x.Name=="Top Secret Establishment")
    }
);
context.SaveContext();

我已经尝试以多种方式更改模型,因为我了解卢基(Lukyer)建议的建议,包括这里描述的所有解决方案,我应该如何使用MVC3中的代码Firstentity Framework(4.1)声明外国密钥关系?

简而言之,我尝试了以下所有组合而没有成功:

public class UserInstitutionAssociation {
    public Guid ID { get; set; }
    [Required]
    [ForeignKey("UserID")]
    public virtual User User { get; set; }
    [Required]
    [ForeignKey("InstitutionID")]
    public virtual Institution Institution {get; set;}
}

public class UserInstitutionAssociation {
    public Guid ID { get; set; }
    [Required]
    [ForeignKey("User")]
    public string UserID {get; set; }
    public virtual User User { get; set; }
    [Required]
    [ForeignKey("Institution")]
    public Guid InstitutionID { get; set; }
    public virtual Institution Institution {get; set;}
}

已解决。由于我包含的类作为LINQ查询的一部分而发生。您不能使用x => new { x.User, x.Institution},因为X.user和X.Institution都是复杂的类。相反,这些需要是原始的基本类型(例如字符串或GUID)。它以这种方式更改了AddOrUpdate(x => new {x.UserID, x.InstitutionID}, Associations)。然后需要更改该模型,因此它包含称为userId和InstitutionId的属性,该属性可以由Linq。

查询。

我按以下方式调整了UserInstitutionAssociation代码,因此它包括称为userId和InstitutionId的属性以及用户和I:

public class UserInstitutionAssociation {
    public Guid ID { get; set; }
    [Required]
    [ForeignKey("User")]
    public string UserID {get; set; }
    public virtual User User { get; set; }
    [Required]
    [ForeignKey("Institution")]
    public Guid InstitutionID { get; set; }
    public virtual Institution Institution {get; set;}
}

然后按以下方式调整addorupdate调用:

//Add Association between User and Institution
context.InstitutionUserAssociations.AddOrUpdate(u => new { u.UserID, u.InstitutionID },
    new InstitutionUserAssociation
    {
        User = context.Users.Single(x => x.Email=="jamesbond@mi5.com"),
        Institution = context.Institutions.Single(x => x.Name=="Top Secret Establishment")
    }
);

最新更新