Entity Framework many to many fluent API -
i'm working existing database schema fixed.
there 3 many-to-many relations, contact-group, contact-department , contact-team
. there common table, contactrelation
acts middle table 3 relations.
public class contact { [column("ctcid")] public int id { get; set; } [column("ctcfirstname")] public string firstname { get; set; } [column("ctcfamilyname")] public string lastname { get; set; } public virtual icollection<contactrelation> grouprelations { get; set; } public virtual icollection<contactrelation> departmentrelations { get; set; } public virtual icollection<contactrelation> teamrelations { get; set; } } public class group { [key, column("grid")] public int id { get; set; } [column("grname")] public string name { get; set; } public virtual icollection<contactrelation> contactrelations { get; set; } } public class department { [key, column("depid")] public int id { get; set; } [column("depname")] public string name { get; set; } public virtual icollection<contactrelation> contactrelations { get; set; } } public class team { [key, column("tmid")] public int id { get; set; } [column("transcode")] public string transcode { get; set; } public virtual icollection<contactrelation> contactrelations { get; set; } } public class contactrelation { [key] [column("ctcrelnid")] public int id { get; set; } [column("grid")] public int groupid { get; set; } [column("depid")] public int departmentid { get; set; } [column("tmid")] public int teamid { get; set; } [column("cuctcid")] public int contactid { get; set; } [column("rcode")] public string rolecode { get; set; } }
in mapping, have following code:
protected override void onmodelcreating(dbmodelbuilder modelbuilder) { modelbuilder.entity<group>() .hasmany(g => g.contactrelations) .withrequired() .hasforeignkey(r => r.groupid); modelbuilder.entity<department>() .hasmany(c => c.contactrelations) .withrequired() .hasforeignkey(r => r.departmentid); modelbuilder.entity<team>() .hasmany(s => s.contactrelations) .withrequired() .hasforeignkey(r => r.teamid); modelbuilder.entity<contact>() .hasmany(c => c.grouprelations) .withrequired() .hasforeignkey(r => r.contactid); modelbuilder.entity<contact>() .hasmany(c => c.departmentrelations) .withrequired() .hasforeignkey(r => r.contactid); modelbuilder.entity<contact>() .hasmany(c => c.teamrelations) .withrequired() .hasforeignkey(r => r.contactid); }
i try execute following query:
var ctc = repo.contacts .include("grouprelations") .include("departmentrelations") .firstordefault(c => c.firstname.tolower() == "jason");
and keep getting error:
system.data.sqlclient.sqlexception: invalid column name 'contact_id1'. invalid column name 'contact_id'. invalid column name 'contact_id1'. invalid column name 'contact_id2'.
i read somewhere table cannot participate in more 1 many-to-many relations. true? because contactrelation table used more once i'm getting error?
if so, what's correct way map these relations, without modifying database schema.?
ps: i'm working ef6.1
thanks help.
remove mapping
modelbuilder.entity<contact>() .hasmany(c => c.teamrelations) .withrequired() .hasforeignkey(r => r.contactid);
and try executing query.
Comments
Post a Comment