public class MemberCompany
{
public Guid CompanyId { get; set; }
public Guid MemberId { get; set; }
public virtual Member Member { get; set; }
public virtual ICollection<Company> Company { get; set; }
}
錯誤如下:
Unable to determine the relationship represented by navigation property 'Company.MemberCompanies' of type 'ICollection<MemberCompany>'. Either manually configure the relationship, or ignore this property using the '[NotMapped]' attribute or by using 'EntityTypeBuilder.Ignore' in 'OnModelCreating'.
uj5u.com熱心網友回復:
補充下會員和公司的表結構
public class Member : ModelBase
{
[MaxLength(36)]
public string WechatUnionId { get; set; }
[MaxLength(36)]
public string WechatOpenId { get; set; }
[MaxLength(50)]
public string NickName { get; set; }
[MaxLength(100)]
public string Avatar { get; set; }
public Gender Gender { get; set; }
public int? Nation { get; set; }
public int? Province { get; set; }
public int? City { get; set; }
[MaxLength(50)]
public string Address { get; set; }
[MaxLength(50)]
public string Job { get; set; }
[Description("來源"), MaxLength(50)]
public string Source { get; set; }
[Description("會員獨立Key")]
public Guid MemberKey { get; set; }
public MemberType MemberType { get; set; }
public bool IsAuth { get; set; }
public Guid SysUserAccountId { get; set; }
[ForeignKey("SysUserAccountId")]
public virtual SysUserAccount SysUserAccounts { get; set; }
public virtual ICollection<MemberCompany> MemberCompanies { get; set; }
public virtual ICollection<Article> Articles { get; set; }
public virtual ICollection<ArticleReply> ArticleReplies { get; set; }
public virtual ICollection<Recruitment> Recruitments { get; set; }
public virtual ICollection<Wholesale> Wholesales { get; set; }
}
public class Company : ModelBase
{
[MaxLength(50)]
public string Name { get; set; }
public string Logo { get; set; }
public string Contact { get; set; }
public string Description { get; set; }
public string Address { get; set; }
public string Website { get; set; }
public string FullName { get; set; }
public string Legal { get; set; }
public decimal RegisteredCapital { get; set; }
public DateTime RegisterDate { get; set; }
public string CreditNo { get; set; }
public string BusinessScope { get; set; }
public virtual ICollection<MemberCompany> MemberCompanies { get; set; }
public class MemberCompany
{
public Guid CompanyId { get; set; }
public Guid MemberId { get; set; }
public virtual Member Member { get; set; }
public virtual ICollection<Company> Company { get; set; }
}
改成
public class MemberCompany
{
public Guid CompanyId { get; set; }
public Guid MemberId { get; set; }
[ForeignKey("MemberId")]
public virtual Member Member { get; set; }
[ForeignKey("CompanyId")]
public virtual Company Company { get; set; }
}
public class MemberCompany
{
public Guid CompanyId { get; set; }
public Guid MemberId { get; set; }
public virtual Member Member { get; set; }
public virtual ICollection<Company> Company { get; set; }
}
改成
public class MemberCompany
{
public Guid CompanyId { get; set; }
public Guid MemberId { get; set; }
[ForeignKey("MemberId")]
public virtual Member Member { get; set; }
[ForeignKey("CompanyId")]
public virtual Company Company { get; set; }
}
這樣會報錯
'FK_Members_Companies_CompanyId' 不是約束。
資料庫,添加外鍵約束了嗎
兩張表的物體都加了
public virtual ICollection<MemberCompany> MemberCompanies { get; set; }
是通過 ef codefirst , 執行 mig
uj5u.com熱心網友回復:
兩張表的物體都加了
public virtual ICollection<MemberCompany> MemberCompanies { get; set; }
是通過 ef codefirst , 執行 mig
如果你手動創建 code first 的話,感覺很困惑。
我可以教你個辦法,
你在資料庫,先設計好,包括主外鍵也定義好。
然后db first方式生成ef。
把里面的相關class和dbcontext拷貝出來。洗掉掉這個ef產生的edmx。
你就能看到他根據你的表結構產生的model是怎么關聯的了。
uj5u.com熱心網友回復:
兩張表的物體都加了
public virtual ICollection<MemberCompany> MemberCompanies { get; set; }
是通過 ef codefirst , 執行 mig
如果你手動創建 code first 的話,感覺很困惑。
我可以教你個辦法,
你在資料庫,先設計好,包括主外鍵也定義好。
然后db first方式生成ef。
把里面的相關class和dbcontext拷貝出來。洗掉掉這個ef產生的edmx。
你就能看到他根據你的表結構產生的model是怎么關聯的了。
那按照你的理解的話, 除了加這張中間表之外, 會員表和公司表需要做什么改動嗎?
會員只要有關聯公司就會在中間表存入資料,但不是每個會員都有關聯公司
uj5u.com熱心網友回復:
兩張表的物體都加了
public virtual ICollection<MemberCompany> MemberCompanies { get; set; }
是通過 ef codefirst , 執行 mig
如果你手動創建 code first 的話,感覺很困惑。
我可以教你個辦法,
你在資料庫,先設計好,包括主外鍵也定義好。
然后db first方式生成ef。
把里面的相關class和dbcontext拷貝出來。洗掉掉這個ef產生的edmx。
你就能看到他根據你的表結構產生的model是怎么關聯的了。
那按照你的理解的話, 除了加這張中間表之外, 會員表和公司表需要做什么改動嗎?
會員只要有關聯公司就會在中間表存入資料,但不是每個會員都有關聯公司
會員沒有關聯公司的,那照道理就不會有這個記錄資料。
uj5u.com熱心網友回復:
兩張表的物體都加了
public virtual ICollection<MemberCompany> MemberCompanies { get; set; }
是通過 ef codefirst , 執行 mig
如果你手動創建 code first 的話,感覺很困惑。
我可以教你個辦法,
你在資料庫,先設計好,包括主外鍵也定義好。
然后db first方式生成ef。
把里面的相關class和dbcontext拷貝出來。洗掉掉這個ef產生的edmx。
你就能看到他根據你的表結構產生的model是怎么關聯的了。
那按照你的理解的話, 除了加這張中間表之外, 會員表和公司表需要做什么改動嗎?
會員只要有關聯公司就會在中間表存入資料,但不是每個會員都有關聯公司
會員沒有關聯公司的,那照道理就不會有這個記錄資料。
那到時候如果要去查這個會員有沒有關聯公司, 就沒法通過導航屬性來查了?
public virtual ICollection<MemberCompany> MemberCompanies { get; set; }
uj5u.com熱心網友回復:
var q = MemberCompany.firstOrDefault(x=>x.會員id==xxxx)
if q==null就代表了沒有關聯公司。
uj5u.com熱心網友回復:
而如果要查某公司下有多少會員,
也就是
var q = MemberCompany.where(x=>x.Company==xxxx)
uj5u.com熱心網友回復:
而如果要查某公司下有多少會員,
也就是
var q = MemberCompany.where(x=>x.Company==xxxx)
這樣執行 migration 的時候會報這個錯
Error: 'FK_Members_Companies_CompanyId' 不是約束。
members 或者 company 物體 不需要做調整嗎?
uj5u.com熱心網友回復:
而如果要查某公司下有多少會員,
也就是
var q = MemberCompany.where(x=>x.Company==xxxx)
舉個實體:
比如會員表物體
public class Member
{
public Guid Id { get; set; }
public string NickName { get; set;}
}
公司表物體:
public class Company
{
public Guid Id { get; set; }
public string CompanyName { get; set; }
}
中間表物體:
public class MemberCompany
{
public Guid Id{get;set;}
[ForeignKey("MemberId")]
public Guid MemberId { get; set; }
[ForeignKey("CompanyId")]
public Guid CompanyId { get; set; }
}
uj5u.com熱心網友回復:
這樣需要在 Member 和 Company 做調整?
uj5u.com熱心網友回復:
算了,我直接貼代碼給你吧。
Company
public partial class Company
{
public Company()
{
this.MemberCompany = new HashSet<MemberCompany>();
}
public int id { get; set; }
public string name { get; set; }
public virtual ICollection<MemberCompany> MemberCompany { get; set; }
}
Member
public partial class Member
{
public Member()
{
this.MemberCompany = new HashSet<MemberCompany>();
}
public int id { get; set; }
public string name { get; set; }
public virtual ICollection<MemberCompany> MemberCompany { get; set; }
}
MemberCompany
public int id{get;set;}
public int mid{get;set;}
public int cid{get;set;}
[ForeignKey("mid")]
public Member Member{get;set;}
[ForeignKey("cid")]
public Company Company{get;set;}