在我的项目中,我需要将销售线索添加到数据上下文中。销售人员用户添加了潜在客户,我需要将电子邮件发送给负责人的经理。
public partial class Lead
{
public Lead()
{
this.LeadActivities = new HashSet<LeadActivity>();
}
public long LeadID { get; set; }
public System.DateTime CreatedAt { get; set; }
public long CompanyID { get; set; }
public long ProductID { get; set; }
public long CreatedByUserID { get; set; }
public string Remarks { get; set; }
public LeadStatusEnum StatusID { get; set; }
public virtual Company Company { get; set; }
public virtual Product Product { get; set; }
public virtual User User { get; set; }
public virtual ICollection<LeadActivity> LeadActivities { get; set; }
}
[Serializable]
public partial class Person
{
public Person()
{
this.Contacts = new HashSet<Contact>();
this.Users = new HashSet<User>();
}
public long PersonID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Designation { get; set; }
public Nullable<int> Gender { get; set; }
public Nullable<int> Title { get; set; }
public int StatusID { get; set; }
public string Thumbnail { get; set; }
public string Email { get; set; }
public virtual ICollection<Contact> Contacts { get; set; }
public virtual ICollection<User> Users { get; set; }
}
在上面的实体中,我有通过CreatedByUserID与Person表相关联的属性UserID。当我添加新的潜在客户时,通过以下代码,用户字段保持为空。我需要重建吗?如果是,那么如何。
EDIT1 实体创建通过以下代码完成
Entity = new Model.Lead
{
CreatedAt = DateTime.Now,
CreatedByUserID = SessionManagement.GeneralSession.UserDetail.UserID
};
Entity.CreatedAt = Convert.ToDateTime(txtTimestamp.Value);
Entity.CompanyID = Convert.ToInt64(ddlCompany.SelectedValue);
Entity.CreatedByUserID = Convert.ToInt64(ddlUser.SelectedValue);
Entity.ProductID = Convert.ToInt64(lstProducts.SelectedValue);
Entity.Remarks = txtRemarks.Text;
DataSource.Leads.Add(Entity);
DataSource.SaveChanges();
答案 0 :(得分:1)
Virtual lazy loading only works with proxy instances。由于您明确构建了Lead
实体,因此在插入实体后延迟加载User
导航属性将无效。
相反,您应该使用DbSet.Create
方法来新建派生代理类型的实例。然后执行插入操作,该插入操作将附加到上下文中,延迟加载将随后工作。
或者,您可以使用现有的POCO,执行插入操作,然后使用DbSet.Find
方法从DbSet
获取插入的实体作为其代理。
您还应该检查并确保正确映射外键ID和导航属性,因为属性CreatedByUserID
和User
不会按惯例自动关联。