2013-08-07 110 views
0

我尝试添加新的存储库类表添加导航属性称为PersonFieldGroupDomain但是这是它的样子:如何在实体框架

enter image description here

所以基本上我们只有两个领域为这张桌子。所以我去了实体框架模型设计师,我无法将此表添加到使用数据库更新模型的设计器中,甚至不可见。但是,当我看到其他依赖于它的表时,我只能将其视为Navigational Property。

所以,我需要一个新的记录添加到它,但因为我不能直接像我为他人做的背景下实现它,我尝试使用“附加”的方法是这样添加它:

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

是DomainId主键吗?在实体模型从数据库中选取它之前,您需要在表中有一个主键。 –

+0

是的,'DomainId'是一个主键。 – Tarik

回答

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,因此当您使用fieldGroupSet.PersonFieldGroupDomain属性到达时,它的类型为Domain。如上面的代码所示,我直接使用现有的Domain对象进行设置,并在保存更改后,更改在数据库中保持不变,并且工作正常!