Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 带EF 4 c的外键#_C#_Entity Framework_Key - Fatal编程技术网

C# 带EF 4 c的外键#

C# 带EF 4 c的外键#,c#,entity-framework,key,C#,Entity Framework,Key,EF 4.0中的外键有问题 我和一个玩家玩了一个小游戏。这个玩家在游戏中可以有一些角色 所以,当我想向数据库添加一个字符时,我必须设置外键“PlayerId” 这是我的代码,但在上下文模型中添加对象时终止: using (DatabaseModelContainer model = new DatabaseModelContainer()) { Character c = new Character(); c.Player.Id = idPlayer; model.Ch

EF 4.0中的外键有问题

我和一个玩家玩了一个小游戏。这个玩家在游戏中可以有一些角色

所以,当我想向数据库添加一个字符时,我必须设置外键“PlayerId”

这是我的代码,但在上下文模型中添加对象时终止:

using (DatabaseModelContainer model = new DatabaseModelContainer())
{
    Character c = new Character();
    c.Player.Id = idPlayer;

    model.CharacterJeu.AddObject(c);
    model.SaveChanges();
}
谢谢你的回答。

这里有些奇怪的事情

Character c = new Character();
c.Player.Id = idPlayer;//But instance c has no Player (well, I don't know the constructor of Character, but I may imagine there's no new Player() inside)
顺便说一句,使用您似乎拥有的模型,您不必像管理FK那样管理FK。您必须管理引用(导航)属性

你可以那样做

Character c = new Character{
   Player =  model.GetPlayerByid(idPlayer);//or something like that
}

实体框架有一个名为Attach的方法,这可能就是您正在寻找的方法。我认为它可以用于更新现有对象上的外部实体


MSDN:

您是否有任何错误或什么?您能描述一下您所遇到的错误吗?然而,最常用的添加角色的方法是通过玩家。即使用
idPlayer
从modelcontainer中查找
播放器。然后
player.Characters.Add(c)