[英]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对象仅设置了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.