C# OneToMany添加新记录?
我试图在2个类User和Broker之间创建一个OneToMany关系,其中User有许多Broker 问题是,当我添加一个新的代理时,一个新的用户也被创建了,我不知道为什么会这样 我怎样才能修好它 使用者 用户地图C# OneToMany添加新记录?,c#,asp.net-mvc,entity-framework,C#,Asp.net Mvc,Entity Framework,我试图在2个类User和Broker之间创建一个OneToMany关系,其中User有许多Broker 问题是,当我添加一个新的代理时,一个新的用户也被创建了,我不知道为什么会这样 我怎样才能修好它 使用者 用户地图 这是实体框架的预期行为,实体框架为您提供的工具。换句话说,您不必担心创建一个用户,并且在创建后将其与该代理关联。用户是一个新实体,与dbcontext完全断开连接,因此,它将作为一个新实体与代理一起插入。 然而,为了避免这种情况,首先需要从数据库中读取用户,然后将其分配给代理,以便
这是实体框架的预期行为,实体框架为您提供的工具。换句话说,您不必担心创建一个用户,并且在创建后将其与该代理关联。用户是一个新实体,与dbcontext完全断开连接,因此,它将作为一个新实体与代理一起插入。 然而,为了避免这种情况,首先需要从数据库中读取用户,然后将其分配给代理,以便在不插入新用户的情况下建立关系
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();
您正在向broker.user添加一个用户,因此该用户将按预期与borker一起插入。@rad但我已经插入了该用户,broker.user=user正在获取该用户并建立关系。有没有办法做到这一点?这意味着我不需要使用broker.user=user?那么,它将如何知道我想要创建关系的用户,特别是因为该用户已经存在?对不起,我误解了最初的问题。我想这可以解决你的问题。
public class Broker{
public long id { get; set; }
public String name { get; set; }
public User user { get; set; }
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();
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();