在 EF5 中添加/更新实体(包括关系)所需的模式
本文关键字:关系 模式 包括 EF5 添加 实体 更新 | 更新日期: 2023-09-27 18:33:23
我首先使用带有实体框架 5 代码和 C# 的 VS 2010 并有一个 Web 应用程序(因此实体断开连接(。我习惯于直接使用 SQL 查询,但首先对 EF 和代码非常陌生。
我有两个类:
public class User
{
public int UserID {get; set;}
public string UserName { get; set; }
public bool IsSuspended { get; set; }
public int UnitID { get; set; }
public virtual MyTrust MyTrusts { get; set; }
}
public class MyTrust
{
public int MyTrustID { get; set; }
public string MyTrustName { get; set; }
public string Region { get; set; }
public bool DoNotUse { get; set; }
}
我的 DbContext 类包含:
public DbSet<MyTrust> MyTrust { get; set; }
public DbSet<User> Users { get; set; }
modelBuilder.Entity<User>()
.HasRequired(m => m.MyTrust);
我的信任实体不会更改我感兴趣的有三种情况:
- 使用现有"我的信任"添加用户
- 在不更改信任的情况下更新用户
- 使用对信任的更改更新用户
当网站返回数据时,MyTrust 对象只有 MyTrustID 集。当我更新/添加用户时,MyTrust记录也会更新。
用户对象中的关系未更新;实际的 MyTrust 对象使用从网站返回的数据进行更新;由于大多数字段为空,这会损坏对象,并且无法实现用户记录所需的更新。
事实上,问题似乎归结为这样一个事实,即关系的错误一端正在更新。
我看过很多例子,我看不到一个简单的解决方案。
任何人都可以为此建议一个简单的模式(这在 SQL 时代非常容易(。
更新我通过向用户和MyTrust类添加特定密钥来解决此问题。
public int NHSTrustID { get; set; }
以及 MyTrust 类中的匹配键。
回想起来,这个问题是错误的。我追求的不是模式,而是特定问题的解决方案。
我在下面给出了一些例子 - 我已经从记忆中完成了它们,但希望能给你一个很好的起点:
使用现有"我的信任"添加用户
using(var context = new MyDbContext()){
context.Entry(myUser).State = EntityState.Added
context.Entry(myUser.MyTrusts).State = EntityState.Modified;
context.Entry(myUser.MyTrusts).Property(x => x.MyTrustName).IsModified = false;
context.Entry(myUser.MyTrusts).Property(x => x.Region).IsModified = false;
context.Entry(myUser.MyTrusts).Property(x => x.DoNotUse).IsModified = false;
context.SaveChanges();
}
在不更改信任的情况下更新用户:
using(var context = new MyDbContext()){
context.Entry(myUser).State = EntityState.Modified
context.Entry(myUser.MyTrusts).State = EntityState.Unchanged;
context.SaveChanges();
}
通过对信任的更改更新用户:
using(var context = new MyDbContext()){
context.Entry(myUser).State = EntityState.Modified
context.Entry(myUser.MyTrusts).State = EntityState.Modified;
context.SaveChanges();
}