entity framework - Navigation Properties using two foreign keys -
i have project several tables in same database.
public class userimage { [key] public int id { get; set; } public string ownerid { get; set; } [foreignkey("ownerid")] public virtual applicationuser owner { get; set; } //some fields removed brevity } public class friendrequest { [key] public int id { get; set; } public string userid { get; set; } public string futurefrienduserid { get; set; } [foreignkey("userid")] public virtual applicationuser user { get; set; } [foreignkey("futurefrienduserid")] public virtual applicationuser futurefrienduser { get; set; } } public class applicationuser : identityuser { //some fields removed brevity public virtual icollection<userimage> userimages { get; set; } public virtual icollection<friendrequest> friendrequests { get; set; } the problem can find images belong user:
var userstore = new userstore<applicationuser>(db); var usermanager = new usermanager<applicationuser>(userstore); applicationuser user = usermanager.findbyid(user.identity.getuserid()); ienumerable<string> imgs = (from image in user.userimages select url.content(image.imageurl)).skip(skip).take(5).tolist(); but can't use same technique friendrequests. if search in database rows have userid == user.identity.getuserid() or other id, results expect. problem?
what you're creating here self-referential many-to-many relationship. on friendrequest class, have 2 properties foreign keys applicationuser, on applicationuser class, have single collection of friendrequest. entity framework has no idea foreign key should compose collection. result, have make few changes working properly.
you must add navigation property. essentially, on
applicationuserclass you'll end following:public virtual icollection<friendrequest> sentfriendrequests { get; set; } public virtual icollection<friendrequest> receivedfriendrequests { get; set; }again, need collection each foreign key.
you'll need add fluent config entity framework determine foreign key use each collection:
public class applicationcontext : dbcontext { ... protected override void onmodelcreating(dbmodelbuilder modelbuilder) { modelbuilder.entity<friendrequest>().hasrequired(m => m.user).withmany(m => m.sentfriendrequests); modelbuilder.entity<friendrequest>().hasrequired(m => m.futurefrienduser).withmany(m => m.receivedfriendrequests); }
Comments
Post a Comment