我正在尝试在其中用户有许多代理的两个类“用户和代理”之间创建OneToMany关系。
问题是当我添加一个新的Broker时,也创建了一个新的User,但是我不知道为什么会这样。
我该如何解决?
用户
public class User{
public long id { get; set; }
public String name { get; set; }
public IList<Broker> brokers { get; set; }
经纪人
public class Broker{
public long id { get; set; }
public String name { get; set; }
public User user { get; set; }
UserMap
public class UserMap : EntityTypeConfiguration<User>{
public UserMap (){
this.ToTable("Users");
this.HasKey<long>(u => u.id);
this.Property(u => u.id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
this.Property(u => u.name).IsRequired().HasMaxLength(50);
HasMany(u => u.brokers).WithRequired(c => c.user);
经纪人地图
public class BrokerMap : EntityTypeConfiguration<Broker>{
public BrokerMap (){
this.ToTable("Brokers");
this.HasKey<long>(c => c.id);
this.Property(c => c.id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
this.Property(c => c.name).IsRequired().HasMaxLength(50);
HasRequired(u => u.user).WithMany(c => c.brokers);
保存数据
Broker broker = new Broker();
User user = Session["User"] as User;
broker.user = user;
context.Brokers.Add(broker);
context.SaveChanges();
答案 0 :(得分:1)
user
是一个新实体,与您的dbcontext
完全断开,因此,它与broker
一起作为新实体插入。
但是,为了避免这种情况,首先需要从数据库中读取user
,然后将其分配给broker
,以便在不插入新user
的情况下建立关系。
User user = Session["User"] as User;
var userFromDb = context.Users.FirstOrDefault(t = > t.Id == user.Id);
broker.user = userFromDb ;
context.Brokers.Add(broker);
context.SaveChanges();
答案 1 :(得分:0)
这是实体框架(它们为您提供的功能)的预期行为。换句话说,您不必担心创建用户,一旦创建用户便会将其与该代理相关联。