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;
}