繁体   English   中英

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

[英]Pattern required for adding/updating entities in EF5 including relationships

我先将VS 2010与Entity Framework 5代码和C#结合使用,并且具有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实体将不会更改我感兴趣的是三种情况:

  • 添加具有现有MyTrust的用户
  • 在不更改信任的情况下更新用户
  • 通过更改信任更新用户

当网站返回数据时,MyTrust对象仅设置了MyTrustID。 当我更新/添加用户时,MyTrust记录也会更新。

澄清用户对象中的关系未更新; 使用从网站返回的数据更新实际的MyTrust对象; 由于大多数字段为空,因此会损坏对象,并且无法实现所需的用户记录更新。

实际上,问题似乎可以归结为关系的错误端正在更新的事实。

我看了很多例子,但看不到一个简单的解决方案。

任何人都可以为此建议一个简单的模式(在SQL时代是如此简单)。

更新我通过向User和MyTrust类添加特定的键来解决此问题。

public int NHSTrustID { get; set; }

以及MyTrust类中的匹配键。

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

我在下面提供了一些示例-我已经从记忆中完成了这些示例,但希望能为您提供一个良好的起点:

添加具有现有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();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM