数据库中有2个表,一个是[PARENTS],另一个是[CHILDREN] - 将ParentId作为外键。
所以父母和孩子之间的关系只有一个。
问题是当我尝试创建新的CHILDREN记录时,它也会创建一个新的PARENT。
如何解决?谢谢
public void Add(Model.Pages.PageGroup entity)
{
using (var ctx = new SmartDbContext())
{
var dbEntity = entity.ToEntity();
ctx.PageGroups.Add(dbEntity);
ctx.SaveChanges();
}
}
namespace SmartECM.Repository.EF
{
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Data.Entity.Spatial;
public partial class PageGroup
{
public PageGroup()
{
Pages = new HashSet<Page>();
}
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid GroupId { get; set; }
[Required]
[StringLength(100)]
public string GroupName { get; set; }
public Guid ProjectId { get; set; }
[DatabaseGenerated(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.Computed)]
public DateTime? DateAdded { get; set; }
[DatabaseGenerated(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.Computed)]
public DateTime? DateUpdated { get; set; }
public virtual Project Project { get; set; }
public virtual ICollection<Page> Pages { get; set; }
}
}
namespace SmartECM.Repository.EF
{
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Data.Entity.Spatial;
public partial class Project
{
public Project()
{
PageGroups = new HashSet<PageGroup>();
}
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid ProjectId { get; set; }
[Required]
[StringLength(100)]
public string ProjectName { get; set; }
public string ProjectDescription { get; set; }
public Guid? Owner { get; set; }
[DatabaseGenerated(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.Computed)]
public DateTime? DateAdded { get; set; }
[DatabaseGenerated(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.Computed)]
public DateTime? DateUpdated { get; set; }
public virtual ICollection<PageGroup> PageGroups { get; set; }
}
}
答案 0 :(得分:3)
谢谢大家!!!
我从这个链接Entity Framework - Duplicate parent(one) when create new child(many)
得到了正确的答案我想它应该附加父母让EF可以检测到它。
答案 1 :(得分:2)
根据您目前发布的内容,我认为您的问题来自您在相关实体上设置值的位置(即在您调用Add()
方法之前)。我认为您正在做的是您在Project
实体上设置PageGroup
导航属性,然后尝试将其保存。
这样做的问题是,当您将PageGroup
实体添加到集合时,EF会看到ProjectId
字段为空,并假设Project
中找到的数据navigation属性是一个全新的项目,目前不在系统中。然后它将继续前进并创造出新的&#34;数据库中的项目,以便将PageGroup
实体添加到其集合中。
然后,解决方案是仅使用您尝试将其关联到的项目的ID填充ProjectId
字段,而不是将任何内容分配给导航属性。这样,EF就会知道您尝试将实体分配到哪个项目。