我试图为名为PersonFieldGroupDomain
的表添加一个新的存储库类,但这就是它的样子:
所以基本上我们这个表只有两个字段。所以我去了Entity Framework模型设计器,我无法使用数据库中的更新模型将此表添加到设计器中,它甚至都不可见。但是,当我看到其他依赖于它的表时,我只能将其视为Navigational Property。
所以,我需要添加一条新记录,但由于我不能像上面那样直接从上下文中找到它,我尝试使用“Attach”方法添加它,如下所示:
var fieldGroupSet = FieldGroupSets.Single(t=>t.FieldGroupSetId == 1);
fieldGroupSet.PersonFieldGroupDomainReference.Attach(Domains.Single(t=>t.DomainId == 2));
并且此代码无效。至少我使用我在实际项目中使用的相同上下文程序集在LinqPad上测试它。
这篇文章似乎在谈论我可以使用http://msdn.microsoft.com/en-us/data/jj592676.aspx的一些方法,但它们似乎都不适合我。
任何有用的想法都会受到赞赏。
答案 0 :(得分:1)
看起来这个表只是一个连接表。 EF将在设计器视图中隐藏它们。请注意,如果您向表中添加代理键或任何内容,您将开始在设计器中将其视为实体。
要使用它,它应该像
一样简单var fieldGroupSet = FieldGroupSets.Single(t => t.FieldGroupSetId == 1);
var domain = Domains.Single(t => t.DomainId == 2);
fieldGroupSet.Domain = domain;
context.SaveChanges();
由OP编辑:
我的注意事项: 我很抱歉编辑您的答案,但为了将其标记为答案,我需要将我使用的实际代码放在后面你的逻辑:
var fieldGroupSet = FieldGroupSets.Single(t=>t.FieldGroupSetId == 1);
var domain = Domains.Single(t => t.DomainId == 3);
fieldGroupSet.PersonFieldGroupDomain = domain;
SaveChanges();
在上面的代码中,由于PersonFieldGroupDomain是一个导航属性,因此它直接转到Domain
,因此当您使用Domain
属性访问它时,它的类型为fieldGroupSet.PersonFieldGroupDomain
。如上面的代码所示,我使用现有的Domain
对象直接设置它,并在保存更改后,更改在数据库中变得持久,并且有效!