与LINQ2SQL斗争,我是新手,到目前为止一切都很好,但这个问题确实让我感到悲伤。
我有两个对象,Parent和Child,定义为
[Table(Name="Parent")]
public class Parent
{
[Column(IsPrimaryKey = true, IsDbGenerated = true, AutoSync = AutoSync.OnInsert)]
public int ParentID { get; set; }
[Association(OtherKey = "ParentID")]
protected EntitySet<Child> _children = new EntitySet<Child>();
public IList<Child> Children
{
get { return _children.ToList(); }
set { _children (value); }
}
}
[Table(Name="Child")]
public class Child
{
[Column(IsPrimaryKey = true, IsDbGenerated = true, AutoSync = AutoSync.OnInsert)]
public int ChildID { get; set; }
[Association(OtherKey = "ParentID", IsForeignKey=true)]
[Column] public int ParentID { get; set; }
}
我当时正在做的基础是
Parent newParent = new Parent();
Child newChild = new Child();
newParent.Children.Add(newChild);
parentTable.InsertOnSubmit(newParent);
parentTable.Context.SubmitChanges();
如果我删除数据库中两个表之间的关系并保存,则保存好。除了Child记录中的ParentID始终保持为0。
如果我在数据库中创建关系并尝试保存,则会失败,显然是因为Child的ParentID为0会破坏参照完整性。
即使我修改上述内容也是如此;
Parent newParent = new Parent();
Child newChild = new Child();
newChild.ParentID = newParent.ParentID;
newParent.Children.Add(newChild);
parentTable.InsertOnSubmit(newParent);
parentTable.Context.SubmitChanges();
为什么这不起作用?我在Linq2SQL中缺少什么?
非常感谢任何帮助!
答案 0 :(得分:1)
请为项目添加一个前缀为LINQ to SQL classes mapped to relational objects.
的新项'.dbml'
,然后将表添加到设计器界面,这样VS
将自动创建实体映射和相关关系你,
P.S.
:不要忘记为每个表设置primary key
,否则一切都不会完美