Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.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# 实体框架中的外键未更新_C#_.net_Entity Framework_Foreign Keys - Fatal编程技术网

C# 实体框架中的外键未更新

C# 实体框架中的外键未更新,c#,.net,entity-framework,foreign-keys,C#,.net,Entity Framework,Foreign Keys,我有一门课 public class Document { [Key] public int Id { get; set; } public User ModifiedBy { get; set; } public DateTime ModifiedDate { get; set; } } 这里的“User”是一个具有一些属性的类(都是基元类型) 这是我的类文

我有一门课

 public class Document
        {
            [Key]
            public int Id { get; set; }
            public User ModifiedBy { get; set; } 
            public DateTime ModifiedDate { get; set; } 

        }
这里的“User”是一个具有一些属性的类(都是基元类型) 这是我的类文档映射

HasRequired(a=>a.ModifiedBy).WithMany().Map(b=>b.MapKey(“ModifiedBy”).WillCascadeOnDelete(false)

所以在表“Document”中,ModifiedBy是一个外键

我正在尝试更新id为10的文档的ModifiedBy字段

Document  document=  new Document();
using (DBContext ctx = new DBContex())   {

    User loggedinUser =ctx.Users.Where(u=>u.LoginId==loggedInUserId).FirstOrDefault() as User;

    document.id=10;
    document.ModifiedBy = loggedinUser;
    document.ModifiedDate = DateTime.Now;
    ctx.Entry(document).State = EntityState.Modified;
    ctx.SaveChanges();   
}
但是ModifiedBy字段没有更新。只有ModifiedDate字段正在更新

请注意,我不知道更新用户表的内容。
我只想更新文档表

在您的情况下,我会这样做:

using (var ctx = new DBContext())   {

    var loggedinUser = ctx.Users.SingleOrDefault(u=>u.LoginId==loggedInUserId);

    if (loggedinUser == null) throw new Exception("Can't find logged in user");

    var document = ctx.Documents.SingleOrDefault(x => x.id == 10);

    if (document == null) throw new Exception("Can't find associated document");

    document.ModifiedBy = loggedinUser;
    document.ModifiedDate = DateTime.Now;

    ctx.SaveChanges();   
}
现在我这样做的原因

当我执行
var document=ctx.Documents.SingleOrDefault(x=>x.id==10)时我正在将该特定实体调用到EF的变更跟踪程序中。这意味着如果我更改其任何属性,例如
ModifiedDate
EF将自动执行
ctx.Entry(document).State=EntityState.Modified

如果您不这样做,并且希望继续这样做,那么您需要添加这一行(我相信):

基于 我创造

public string ModifiedBy { get; set; }

[DataMember]
[ForeignKey("ModifiedBy")] 
public User ModifiedUser
        {
            get;
            set;
        }
这意味着我还为修改后的用户和指定的ForeignKey引入了一个基元类型(stringmodifiedby)。
这解决了我的问题

您希望通过该特定ID从数据库获取文档。
ctx.Users.Where(u=>u.LoginId==loggedInUserId)。FirstOrDefault()作为用户
可以简化为
ctx.Users.FirstOrDefault(u=>u.LoginId==loggedInUserId)
而且您还需要考虑是使用
FirstOrDefault
还是
SingleOrDefault
。谢谢,但这不是答案,这就是为什么在评论中出现的原因。。。。。另外,这也是一个答案,最上面的一行是,只是不是非常明确这只是一个样本,我没有2个属性,我有大约15个属性。所以,像你这样做更新对我没有好处。好吧,我已经回答了你上面的问题。你在评论中提出的案例并不是一个真正的问题。这是更多的元Stackoverflow。谢谢Callum,但ctx.Documents.Attach(document);ctx.Entry(document).State=EntityState.Modified;不帮我
public string ModifiedBy { get; set; }

[DataMember]
[ForeignKey("ModifiedBy")] 
public User ModifiedUser
        {
            get;
            set;
        }