C# Entity Framework - 将数据插入 child table 时发生堆栈溢出
C# Entity Framework - Stack Overflow when inserting data into child table
我是 C# 和 Entity Framework 的新手。我已经使用这些教程和 Whosebug 来让我更好地理解。
- http://developer.telerik.com/featured/working-with-databases-through-visual-studio/
- https://msdn.microsoft.com/en-us/data/jj193542
使用 Code-First 方法,我创建了一个 parent table 并将数据插入到 table 没问题。当 parent table 正常工作时,我添加了 child table。我现在正在尝试将数据插入 child table。但是,我总是遇到堆栈溢出错误。我认为我的映射有问题,但我不确定是什么。
以下是我的代码。这是我为数据库定义数据库上下文和 objects 的地方。
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; }
}
我有一个不同的 class 解析文件并将行插入每个 table。这是代码:
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);
}
}
因此代码创建了 parent 和 child table。它创建 parent 和 child objects 并填充 objects。但是,当我去保存数据库更改时,它不断调用 get ChildId 并且我得到堆栈溢出。某处有一些循环。我认为这是因为我没有正确设置 parent-child 映射。
任何帮助、指示或链接将不胜感激。谢谢。
我明白了。我做了三件事。我重新创建了 GUID,删除了 DatabaseGenerated(DatabaseGeneratedOption.Identity) 行,并确保 ClassID 方法与 class 名称匹配,并在末尾添加了一个 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; }
}
我是 C# 和 Entity Framework 的新手。我已经使用这些教程和 Whosebug 来让我更好地理解。
- http://developer.telerik.com/featured/working-with-databases-through-visual-studio/
- https://msdn.microsoft.com/en-us/data/jj193542
使用 Code-First 方法,我创建了一个 parent table 并将数据插入到 table 没问题。当 parent table 正常工作时,我添加了 child table。我现在正在尝试将数据插入 child table。但是,我总是遇到堆栈溢出错误。我认为我的映射有问题,但我不确定是什么。
以下是我的代码。这是我为数据库定义数据库上下文和 objects 的地方。
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; }
}
我有一个不同的 class 解析文件并将行插入每个 table。这是代码:
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);
}
}
因此代码创建了 parent 和 child table。它创建 parent 和 child objects 并填充 objects。但是,当我去保存数据库更改时,它不断调用 get ChildId 并且我得到堆栈溢出。某处有一些循环。我认为这是因为我没有正确设置 parent-child 映射。
任何帮助、指示或链接将不胜感激。谢谢。
我明白了。我做了三件事。我重新创建了 GUID,删除了 DatabaseGenerated(DatabaseGeneratedOption.Identity) 行,并确保 ClassID 方法与 class 名称匹配,并在末尾添加了一个 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; }
}