在 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 类中的匹配键。

回想起来,这个问题是错误的。我追求的不是模式,而是特定问题的解决方案。

在 EF5 中添加/更新实体(包括关系)所需的模式

我在下面给出了一些例子 - 我已经从记忆中完成了它们,但希望能给你一个很好的起点:

使用现有"我的信任"添加用户

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