[英]C# Entity Framework - Stack Overflow when inserting data into child table
我是C#和Entity Framework的新手。 我已使用这些教程和StackOverflow来使我更好地理解。
使用代码优先方法,我创建了一个父表并将数据插入该表中没问题。 当父表正常工作时,我添加了子表。 我现在正在尝试将数据插入该子表。 但是,我总是收到堆栈溢出错误。 我认为我的映射有问题,但是我不确定是什么问题。
以下是我的代码。 在这里定义数据库上下文和数据库对象。
public class DatabseContext : System.Data.Entity.DbContext
{
public DbSet<Parent> Parents { get; set; }
public DbSet<Child> Children { get; set; }
}
public class Parent
{
private Guid parentIdVal;
public Parent()
{
Children = new List<child>();
}
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid parentId
{
get { return parentIdVal; }
set { parentIdVal = Guid.NewGuid(); }
}
[Required]
[StringLength(4)]
public string parentData { get; set; }
public virtual List<Child> Children { get; set; }
}
public class Child
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid childId
{
get { return childId; }
set { childId = Guid.NewGuid(); }
}
[ForeignKey("Parent")]
public Guid parentId { get; set; }
[Required]
[StringLength(65)]
public string childData { get; set; }
public virtual Parent Parent { get; set; }
}
我有一个不同的类来解析文件并将行插入到每个表中。 这是代码:
private static void addParentRecord(String source)
{
using (var db = new DatabaseContext())
{
Parent parent = new Parent();
addDataToParent(parent);
createChildren(source, parent);
db.Parents.Add(parent);
db.SaveChanges();
}
}
private static void createChildren(String source, Parent parent)
{
Regex regex = new Regex(pattern);
foreach (Match match in regex.Matches(source))
{
Child child = new child();
child.childData = match.Groups[group].Value;
parent.Children.Add(child);
}
}
因此,代码创建了父表和子表。 它创建父对象和子对象,并填充对象。 但是,当我保存数据库更改时,它会不断调用get ChildId并导致堆栈溢出。 某处有一些循环。 我认为这是因为我没有正确设置父子映射。
任何帮助,指针或链接将不胜感激。 谢谢。
我想到了。 我做了三件事。 我重做了如何创建GUID,取出DatabaseGenerated(DatabaseGeneratedOption.Identity)行,并确保ClassID方法将类名与末尾添加的ID匹配(没有额外的或缩写)。 对于有相同问题的任何人,我的代码现在看起来像这样:
public class Parent
{
public Parent()
{
Children = new List<child>();
parentId = Guid.NewGuid();
}
[Key]
public Guid parentId { get; set; }
[Required]
[StringLength(4)]
public string parentData { get; set; }
public virtual List<Child> Children { get; set; }
}
public class Child
{
public Child()
{
childId = Guid.NewGuid();
}
[Key]
public Guid childId { get; set; }
[ForeignKey("Parent")]
public Guid parentId { get; set; }
[Required]
[StringLength(65)]
public string childData { get; set; }
public virtual Parent Parent { get; set; }
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.