C# Linq->;实体和外键表问题

C# Linq->;实体和外键表问题,c#,.net,visual-studio-2010,foreign-keys,saving-data,C#,.net,Visual Studio 2010,Foreign Keys,Saving Data,C#和通用编程工具 我有两张桌子。财产和备忘录。单个属性可以有多个备忘录。我已经,至少我认为我已经,正确地完成了对象创建的格式。我的问题是,Memo对象没有与Property对象一起保存。属性对象似乎保存得很好 因为我是一个堆栈noobie,我不能将图片发布到帖子中,所以我上传了一对图片,显示了我的实体图和引用约束对话框 www.jmtland.com/Pics/Diagram.png www.jmtland.com/Pics/Referential%20Constraint.png 在过去

C#和通用编程工具

我有两张桌子。财产和备忘录。单个属性可以有多个备忘录。我已经,至少我认为我已经,正确地完成了对象创建的格式。我的问题是,Memo对象没有与Property对象一起保存。属性对象似乎保存得很好


因为我是一个堆栈noobie,我不能将图片发布到帖子中,所以我上传了一对图片,显示了我的实体图和引用约束对话框

www.jmtland.com/Pics/Diagram.png

www.jmtland.com/Pics/Referential%20Constraint.png


在过去的两天里,我一直在多个论坛上搜索解决此问题的方法。我遵循了太多的示例,几乎忘记了我的原始代码

对不起,没有人

更新: 我已尝试先保存属性表,然后保存备忘表。 -也不行

我已经运行了调试器,其中似乎有与Memo对象关联的数据,并且Property对象包含有问题的Memo对象,但由于某种原因,它不会同时保存

我考虑过另一种方法,可以保存属性,然后执行新查询以获取新对象的属性ID,然后使用返回的属性ID强制保存Memo对象


这种方法的问题是,这意味着我对实体框架的理解不正确。我可能能够破解它,但如果我不能让它从一开始就正常工作,我担心我以后对同一技术的实现会因为我无法从一开始就正确使用而受到阻碍。我以前涉猎过编程,我学到的一件事是,如果你没有在第一次正确地学习基础知识,你的其他经验可能会被破坏。

来自RPM1984的评论似乎起到了作用。我不知道为什么在我尝试的过程中,它起了作用,但不管怎样,我现在可以继续编写下一个4小时的单一方法了


你有导航设备吗 称为“财产”上的“备忘录” 您的EDMX上的实体?我想最后 线路应该是 dc.Properties.AddObject(newProp)– RPM1984 5小时前


你想“保存”到数据库,对吗?您是否在其他地方调用了
SaveChanges()
?我在这里没有看到。我的c/p和dc中有一个错误。SaveChanges();没有进入代码块。就在它下面。哦,没关系,它在那儿;请确保它位于“代码”部分。在EDMX上的“属性”实体上是否有名为“备忘录”的导航属性?我认为最后一行应该是
dc.Properties.AddObject(newProp)
在保存新属性的备忘录之前,您不需要保存它吗?
            MTDBEntities1 dc = new MTDBEntities1();

            Property newProp = new Property();
            newProp.Address = t_Address.Text.Trim();
            newProp.City = t_City.Text.Trim();
            newProp.State = t_State.Text.Trim();
            newProp.Zip = t_Zip.Text.ToString();
            newProp.PropertyType = cb_PropertyType.Text.Trim();
            if (t_SizeMin.Text.Trim().Length != 0) { newProp.SizeMin = Convert.ToInt64(t_SizeMin.Text); }          // SizeMin is not required, so it won't be passed to the DB if there is no value.
            newProp.SizeMax = Convert.ToInt64(t_SizeMax.Text);
            newProp.SizeMetric = cb_SizeType.Text.Trim();
            if (t_PriceMin.Text.Trim().Length != 0) { newProp.PriceMin = Convert.ToDecimal(t_PriceMin.Text); }     // PriceMin is not required, so it won't be passed to the DB if there is no value.
            newProp.PriceMax = Convert.ToDecimal(t_PriceMax.Text);
            newProp.LeaseType = cb_LeaseType.Text.Trim();
            newProp.WebLink = t_WebLink.Text.Trim();
            newProp.Deleted = false;
            newProp.DateDeleted = null;
            newProp.DateCreated = DateTime.Now;

            Memo newMemo = new Memo();
            newMemo.Memo1 = t_PropertyMemo.Text.Trim();
            newMemo.MemoDateCreated = DateTime.Now;

            newProp.Memos.Add(newMemo);
            dc.AddToProperties(newProp);
            dc.SaveChanges();