c# - Entity Framework 如何使用导航属性

标签 c# asp.net entity-framework

当引发 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_Usersaspnet_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/

相关文章:

entity-framework - Entity Framework 目前适合什么类型的项目?

c# - Identity Core 与 Entity Framework 6

c# - WebClient 的 Windows Phone BackgroundWorker?

c# - 工具提示适用于第二次悬停,不适用于第一次悬停

c# - 显示 TreeNode 的图像

c# - 如何将应用程序转换为在中等信任级别下运行?

c# - 如何读取包含未编码数据的查询字符串?

c# - 创建 ADO.NET 模型时如何在应用程序代码中设置敏感数据?d 一些标记 a

c# - TDD nUnit 一个方法的多个断言

c# - 扩展方法必须在非通用静态类中定义