实体框架更新现有的外键引用另一个

时间:2010-03-09 21:56:27

标签: c# entity-framework foreign-keys

我在SQL数据库中有两个表Team_DATA和Driver_PROFILE_DATA。对于每个driver_profile,可以有很多团队。

因此,driver_profile与team_data表之间存在一对多的关系。我想将已存在记录的Driver_profile表中的team_data外键引用更新为已存在的另一个team_data记录。

我想使用实体框架来做这件事。这就是我想要的:拥有一个可供选择的团队列表,在team_data表中查找记录并在driver_profile中适当更新它的FK。

因此,在下面的代码中,传递的参数是team_data表中新选择的团队。

现在我需要它在Driver_profile表中更新它的FK引用。

这就是我所拥有的:

更新:代码已更新。即使我调用savechanges,它也不会将其保存到数据库中。没有错误。

 public Driver_PROFILE_DATA GetSelectedTeam(string team)
    {
        ObjectQuery<Team_DATA> td = raceCtxt.Team_DATA;
        ObjectQuery<Driver_PROFILE_DATA> drpr = raceCtxt.Driver_PROFILE_DATA;

        var selteam = from t in td where t.Team_Name == team select t;

        Team_DATA newteam = new Team_DATA();

        newteam = selteam.Select(x => x).First();

        // get driver_profile with associated team_data
        var data = from a in raceCtxt.Driver_PROFILE_DATA.Include("Team_DATA") select a;
        // put it in driver_profile entity
        profileData = data.Select(x => x).First();

        profileData.Team_DATAReference.Attach(newteam);

        return profileData;
    }

1 个答案:

答案 0 :(得分:1)

实体框架应该为您提供两个类之间的良好关联,像使用POCO一样更新引用,并远离ID值。

类似的东西:

newTeam.Profile.Teams.Remove(profileData);  // separate from old Profile
profileData.Teams.Add(newTeam);

编辑:

我做了一点测试,设置对父对象的引用就足够了:

newTeam.Profile = profileData;