当引发 EntityDataSource _Inserted
事件时,我需要填充一个纯连接表(仅包含与其他表的 FK)。
我的数据库中有 3 个表:
CmsJobs (JobId)
CmsJobsUsers (JobId FK, UserId FK)*
aspnet_Users (UserId)
*CmsJobsUsers 是一个PURE JUNCTION TABLE,它在 EF 模型中不表示为实体。
这是我的代码,我无法将此数据保存在 CmsJobsUsers 中。
protected void uxEntityDataSourceCreateJob_Inserted(object sender, EntityDataSourceChangedEventArgs e)
{
Guid myUserListSelected = new Guid(uxListUsers.SelectedValue);// Guid for UserId in DropDownList
CmsJob myJob = (CmsJob)e.Entity; // My new Jobid
aspnet_Users myUser = new aspnet_Users();
myUser.UserId = myUserListSelected;
}
有什么想法吗?感谢您的帮助!
这里有一个有用的资源: 但我无法实现它: http://thedatafarm.com/blog/data-access/inserting-many-to-many-relationships-in-ef-with-or-without-a-join-entity/
最佳答案
您没有显示您的 EDM,但是您的 CmsJob
实体应该有一个导航属性 aspnet_Users
而 aspnet_User
实体应该有一个导航属性 CmsJobs
。将实体插入联结表的最简单方法是从数据库中获取用户,将 CmsJob
添加到用户 CmsJobs
集合,然后保存用户。
同样,您并没有表现出将任何内容保存到数据库的尝试,所以我会写一个建议:
protected void uxEntityDataSourceCreateJob_Inserted(object sender, EntityDataSourceChangedEventArgs e)
{
using (var context = new YourEFObjectContext())
{
Guid myUserListSelected = new Guid(uxListUsers.SelectedValue);
CmsJob myJob = (CmsJob)e.Entity; // My new Jobid
aspnet_Users myUser = context.aspnet_Users.Single(u => u.UserId == myUserListSelected);
myUser.CmsJobs.Add(myJob);
context.SaveChanges();
}
}
关于c# - Entity Framework 如何使用导航属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4872643/