OneToMany要添加新记录吗?

时间:2019-03-11 19:13:30

标签: c# asp.net-mvc entity-framework

我正在尝试在其中用户有许多代理的两个类“用户和代理”之间创建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();

2 个答案:

答案 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)

这是实体框架(它们为您提供的功能)的预期行为。换句话说,您不必担心创建用户,一旦创建用户便会将其与该代理相关联。