C# 实体框架1到0关系

C# 实体框架1到0关系,c#,asp.net-mvc-3,entity-framework,C#,Asp.net Mvc 3,Entity Framework,技术:ASP.NET MVC3、实体框架4、多层应用程序 我有两个表处于0到1的关系中。一个副本可以有0个或一个pagamento,而pagamento只有一个副本 当我创建一个新的Pagameto实体并将其添加到一个Dupliacata中时,Duplicata的行保存在我的数据库中。Dupliacata给出以下错误: A referential integrity constraint violation occurred: The property values that define t

技术:ASP.NET MVC3、实体框架4、多层应用程序

我有两个表处于0到1的关系中。一个副本可以有0个或一个pagamento,而pagamento只有一个副本

当我创建一个新的Pagameto实体并将其添加到一个Dupliacata中时,Duplicata的行保存在我的数据库中。Dupliacata给出以下错误:

 A referential integrity constraint violation occurred: The property values that define the referential constraints are not consistent between principal and dependent objects in the relationship.
下图显示带有一个Pagamento的实体副本。

而带有gets错误的代码:

            context.Duplicata.Attach(duplicata);
            context.ObjectStateManager.ChangeObjectState(duplicata, EntityState.Modified);

            context.SaveChanges(); 

是的,但是attach的porpouse并不是将元素添加到replica bu中,以将分离的实体添加到上下文中。如果你想创建一个新的副本,只需创建一个新的副本。喜欢

// just for testing NO magic numbers!
var pagamentoId = 1;
var duplicata = new Duplicata();
duplicata.PAGAMENTO_ID = pagamentoId;
duplicata.VALOR = 1000;
duplicata.CLIENTE_ID = 23;

// add the rest of properties


// then...
context.AddObject("Duplicatas", duplicata);
context.SaveChanges();
注意:我在addobject中使用了“Duplicatas”,因为我假设这是Duplicata集合的名称(集合表示它是Duplicata的集合,您在EDMX文件中设置了该名称)


通过将pagamento_id设置为所需的值,它会自动生成两个实体之间的关系

为什么要使用attach?您以前分离过实体吗?因为如果要保存,请尝试使用.AddObject方法而不是headi use attach,因为我的数据库中已经存在副本。在本例中,我向duplicata添加了一个pagamento。但我的问题是,我创建了一个pagamento,并将该pagamento添加到任何duplicata。但是,根据您的db设计,duplicata依赖于pagamento(duplicata是pagamento的父级),并且dbo.pagamento.id和dbo.duplicata.pagamento_id之间建立了关系。如果不是这样,帕加门托是家长,你必须重新设计数据库。所以如果我说的是正确的,你必须先创建pagamento,然后在它上面添加一个副本,所以在db的设计上是一个错误。我需要帕加门托依靠复制品,否则就不行了。我需要的是重做replica和Pagamento之间的关系,replica.Pagamento.add(Pagamento)将正常工作?它应该正常工作,但我更喜欢使用context.AddObject()而不是entityObject.add()。我发现它更容易阅读。