好吧,我一直在拔头发,因为我根本无法建立多对多的关系。我有以下两种型号:
public class UserProfile
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int UserId { get; set; }
public string UserName { get; set; }
public string CompanyName { get; set; }
public string FirstName { get; set; }
public string Lastname { get; set; }
public string EmailAddress { get; set; }
public string PhoneNumber { get; set; }
public bool? ChangePassword { get; set; }
public bool? Deletable { get; set; }
//Add more Properties for more fields
public virtual IQueryable<CompanyInformation> ParentCompany { get; set; }
}
和
public class CompanyInformation
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int id { get; set; }
[DisplayName("Company Name:")]
public string companyName { get; set; }
[DisplayName("Website Address:")]
[Url(ErrorMessage="The Website field is not a valid fully-qualified http, https, or ftp URL. (Example: http://www.website.com)")]
public string website { get; set; }
public string contactTitle { get; set; }
[DisplayName("Contact First Name:")]
public string contactFirstName { get; set; }
//[Required]
[DisplayName("Contact Last Name:")]
public string contactLastName { get; set; }
[Phone]
[DisplayName("Phone Number:")]
public string contactPhoneNumber { get; set; }
[DisplayName("Address Display?")]
public bool displayAddress { get; set; }
[DisplayName("Phone Number?")]
public bool displayPhoneNumber { get; set; }
[DisplayName("Address 1:")]
public string address1 { get; set; }
[DisplayName("Address 2:")]
public string address2 { get; set; }
[DisplayName("City:")]
public string city { get; set; }
[DisplayName("State:")]
public string state { get; set; }
[DisplayName("Zip/Postal Code:")]
public string zipCode { get; set; }
[DisplayName("Search Engine?")]
public bool allowSearchEngines { get; set; }
//Navigation Property
public virtual IQueryable<UserProfile> CompanyUsers{ get; set; }
}
我正试图在这两者之间建立多对多的关系,而我却无法弄清楚如何正确地做到这一点。我应该提一下,我对EF Code First非常陌生。 我的Context类如下所示:
public class myDB : DbContext
{
public SchedulerDB()
: base("DefaultConnection")
{
}
public DbSet<UserProfile> UserProfiles { get; set; }
public DbSet<CompanyInformation> Companies { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<UserProfile>().HasMany(e => e.ParentCompanies).WithMany(e => e.CompanyUsers);
}
}
好的,一旦我在上面添加了modelBuilder,我就会收到以下错误:
The type arguments for method 'System.Data.Entity.ModelConfiguration.EntityTypeConfiguration<Scheduler.Model.UserProfile>.HasMany<TTargetEntity>(System.Linq.Expressions.Expression<System.Func<Scheduler.Model.UserProfile,System.Collections.Generic.ICollection<TTargetEntity>>>)' cannot be inferred from the usage. Try specifying the type arguments explicitly. C:\Users\Hiva\Documents\Project\ToDo\Infrastructure\myDB.cs
我做错了什么?我似乎无法找到任何使用modelBuilder的示例,以实现两个表之间的多对多关系。谢谢你的帮助。
答案 0 :(得分:2)
您应该使用ICollection作为导航属性:
ICollection<UserProfile> CompanyUsers{ get; set; }
和
ICollection<UserProfile> ParentCompanies{ get; set; }
而不是IQueriable