Eine abhängige Eigenschaft in einem ReferentialConstraint zugeordnet ist, um ein Geschäft generierte Spalte. Spalte:
Zunächst einmal vielen Dank für die Zeit nehmen, dies zu Lesen. Ich habe einige Schwierigkeiten mit dem Versuch zum aktualisieren einer Datenbank mithilfe von EF. Ich habe diese Vorgehensweise vor, die auf einem anderen Projekt, also ich denke, die Frage ist vielleicht in der Datenbank, aber ich bin einfach nicht es zu sehen. Die Datenbank ist ein legacy-db in die SQL 2005, und die Namenskonvention hat eine Menge zu wünschen übrig, so habe ich das mapping inkonsistent Namen, um etwas mehr konsistent über die HasColumnName Methode: wie in.
modelBuilder.Entity<Case_Person_1>().ToTable("dbo.Case_Person_1");
modelBuilder.Entity<Case_Person_1>().Property(c => c.Id).HasColumnName("CaseNumber");
Habe ich verglich meine Frage zu den anderen ähnlichen und untersucht, um zu überprüfen, die Fremdschlüssel-Beziehungen sind schon in die richtige Richtung ist und dass die Identität nur auf der PK. Wenn ich NICHT über die Erstellung der Daten-Option explizit festgelegt, wird der Befehl feuert gegen die Datenbank, aber es funktioniert nicht b/c ich bin das einfügen einer " 0 " als meine Schlüssel und option explizit auf OFF festgelegt ist. Ich kann sehen, dass dies in SQL Profiler. Wenn ich die option für die Identität, bekomme ich die Referentielle constraint-Fehler.
Ich habe 2 Tage auf und bin nicht näher an das erreichen einer Lösung, und ich bin ziemlich am Ende meiner Kraft. Nebenbei, in meinem anderen Projekt habe ich nicht brauchen, zu dekorieren mein POCO ist mit der DatabaseGeneratedOption, doch ich bekam keine Fehler auf Einsätze. Ich wusste nicht, ob das ein SQL-2005-Sache, oder wenn ich bin fehlt etwas anderes...
vollständige Fehlerdetails ist hier:
System.Daten.Entität.Infrastruktur.DbUpdateException war gefangen
Message=Fehler beim aktualisieren der Einträge. Finden Sie die innere
Ausnahme für details. Source=EntityFramework StackTrace:
System.Daten.Entität.Intern.InternalContext.SaveChanges()
System.Daten.Entität.Intern.LazyInternalContext.SaveChanges()
System.Daten.Entität.DbContext.SaveChanges()
bei Scyfis.Ocyf.DataLayer.EntityExtensions.AddItem[T](T entity, DbSet1 dbSet, DbContext context, Action
2 foriegnKeyUpdater) in
C:\TFS\CGProjects\GOC\SCYFIS\PHTSY\Dev\src\Datalayer\Helpers\EntityExtensions.cs:Zeile
83
bei Scyfis.Ocyf.DataLayer.EntityExtensions.SaveItem[T](T entity, DbSet1 dbSet, DbContext context, Action
2 foriegnKeyUpdater) in
C:\TFS\CGProjects\GOC\SCYFIS\PHTSY\Dev\src\Datalayer\Helpers\EntityExtensions.cs:Zeile
27
bei Scyfis.Ocyf.DataLayer.Case_PHTSYRepository.Speichern(Case_PHTSY Modell) in
C:\TFS\CGProjects\GOC\SCYFIS\PHTSY\Dev\src\Datalayer\Custom\Case_PHTSYRepository.cs:Zeile
44
bei Scyfis.Ocyf.Service.Case_PHTSYService.Erstellen(Case_PHTSY Modell) in
C:\TFS\CGProjects\GOC\SCYFIS\PHTSY\Dev\src\Service\Custom\Case_PHTSYService.cs:Zeile
184 InnerException: System.Daten.UpdateException
Message=Fehler beim aktualisieren der Einträge. Finden Sie unter der inneren Ausnahme für details.
Source=System.Daten.Entity
StackTrace:
System.Daten.Mapping.Update.Intern.TableChangeProcessor.CompileCommands(ChangeNode
changeNode, UpdateCompiler compiler)
System.Daten.Mapping.Update.Intern.UpdateTranslator.d_0.MoveNext()
System.Linq -.Enumerable.d_711.MoveNext()
1
at System.Data.Mapping.Update.Internal.UpdateCommandOrderer..ctor(IEnumerable
Befehle, UpdateTranslator übersetzer)
System.Daten.Mapping.Update.Intern.UpdateTranslator.ProduceCommands()
System.Daten.Mapping.Update.Intern.UpdateTranslator.Update(IEntityStateManager
stateManager, IEntityAdapter adapter)
System.Daten.EntityClient.EntityAdapter.Update(IEntityStateManager
entityCache)
System.Daten.Objekte.ObjectContext.SaveChanges(SaveOptions options)
System.Daten.Entität.Intern.InternalContext.SaveChanges()
InnerException: System.InvalidOperationException
Message=Eine abhängige Eigenschaft in einem ReferentialConstraint zugeordnet ist, um ein Geschäft generierte Spalte. Column: 'Id'.
Source=System.Daten.Entity
StackTrace:
System.Daten.Mapping.Update.Intern.UpdateCompiler.BuildSetClauses(DbExpressionBinding
Ziel PropagatorResult Zeile, PropagatorResult originalRow,
TableChangeProcessor Prozessor, Boolean insertMode, Dictionary`2&
outputIdentifiers, DbExpression& die Rückkehr, Boolean& rowMustBeTouched)
System.Daten.Mapping.Update.Intern.UpdateCompiler.BuildInsertCommand(PropagatorResult
newRow, TableChangeProcessor Prozessor)
System.Daten.Mapping.Update.Intern.TableChangeProcessor.CompileCommands(ChangeNode
changeNode, UpdateCompiler compiler)
InnerException:
public partial class Case_PHTSY
{
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public int? FamilyHistoryID { get; set; }
public int? PersonId { get; set; }
public DateTime? ReportDate { get; set; }
public string PhysicianName { get; set; }
public string MRNumber { get; set; }
public virtual F_FamilyHistory F_FamilyHistory { get; set; }
public virtual Person Person { get; set; }
public virtual ICollection<CP_ActualDischarge> CP_ActualDischarges { get; set; }
public virtual ICollection<CP_Barrier> Barriers { get; set; }
public virtual ICollection<CP_AgencyContact> AgencyContacts { get; set; }
public virtual ICollection<CP_DischargeActivity> DischargeActivities { get; set; }
public virtual ICollection<C_Role> Roles { get; set; }
public virtual ICollection<Case_Person_RD1> Case_Person_RD1s { get; set; }
public virtual ICollection<PHTSY_CensusCode> PHTSY_CensusCodes { get; set; }
}
public class CP_ActualDischarge
{
public int Id { get; set; }
[ForeignKey("Case_PHTSY")]
public int Case_PHTSYId{ get; set; }
...
public virtual Case_PHTSY Case_PHTSY { get; set; }
}
public partial class CP_Barrier
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public int? Case_PHTSYId { get; set; }
...
public virtual Case_PHTSY Case_PHTSY { get; set; }
}
public partial class CP_AgencyContact
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public int Case_PHTSYId { get; set; }
...
public virtual Case_PHTSY Case_PHTSY { get; set; }
}
public partial class CP_DischargeActivity
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public int? Case_PHTSYId { get; set; }
...
public virtual Case_PHTSY Case_PHTSY { get; set; }
}
public partial class C_Role
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public int? Case_PHTSYId{ get; set; }
public virtual Case_PHTSY Case_PHTSY { get; set; }
}
}
public partial class Case_Person_RD1
{
public virtual C_Role C_Role { get; set; }
public virtual Case_PHTSY Case_PHTSY { get; set; }
}
Fremdschlüssel:
ALTER TABLE [dbo].[CP_ActualDischarge] WITH NOCHECK ADD CONSTRAINT [FK_CP_ActualDischarge_Case_PHTSY] FOREIGN KEY([Case_PHTSYId])
REFERENCES [dbo].[Case_PHTSY] ([Id])
ON DELETE CASCADE
NOT FOR REPLICATION
GO
ALTER TABLE [dbo].[CP_ActualDischarge] CHECK CONSTRAINT [FK_CP_ActualDischarge_Case_PHTSY]
ALTER TABLE [dbo].[CP_AgencyContacts] WITH NOCHECK ADD CONSTRAINT [FK_CP_AgencyContacts_Case_PHTSY] FOREIGN KEY([Case_PHTSYId])
REFERENCES [dbo].[Case_PHTSY] ([Id])
ON DELETE CASCADE
NOT FOR REPLICATION
GO
ALTER TABLE [dbo].[CP_AgencyContacts] CHECK CONSTRAINT [FK_CP_AgencyContacts_Case_PHTSY]
ALTER TABLE [dbo].[CP_Barriers] WITH NOCHECK ADD CONSTRAINT [FK_CP_Barriers_Case_PHTSY] FOREIGN KEY([Case_PHTSYId])
REFERENCES [dbo].[Case_PHTSY] ([Id])
ON DELETE CASCADE
NOT FOR REPLICATION
GO
ALTER TABLE [dbo].[CP_Barriers] CHECK CONSTRAINT [FK_CP_Barriers_Case_PHTSY]
ALTER TABLE [dbo].[CP_DischargeActivities] WITH NOCHECK ADD CONSTRAINT [FK_CP_DischargeActivities_Case_PHTSY] FOREIGN KEY([Case_PHTSYId])
REFERENCES [dbo].[Case_PHTSY] ([Id])
ON DELETE CASCADE
NOT FOR REPLICATION
GO
ALTER TABLE [dbo].[CP_DischargeActivities] CHECK CONSTRAINT [FK_CP_DischargeActivities_Case_PHTSY]
GO
modelBuilder.Entity<Case_PHTSY>().HasMany(c => c.AgencyContacts).WithOptional().HasForeignKey(k => k.Case_PHTSYId);
modelBuilder.Entity<Case_PHTSY>().HasMany(c => c.Barriers).WithOptional().HasForeignKey(k => k.Case_PHTSYId);
modelBuilder.Entity<Case_PHTSY>().HasMany(r => r.DischargeActivities).WithOptional().HasForeignKey(k => k.Case_PhstsyId);
modelBuilder.Entity<Case_PHTSY>().HasMany(c => c.Roles).WithOptional().HasForeignKey(k => k.Case_PHTSYId);
modelBuilder.Entity<Case_PHTSY>().HasMany(m => m.Case_Person_RD1s).WithOptional().HasForeignKey(k => k.Case_PhtsyId);
modelBuilder.Entity<Case_PHTSY>().HasMany(o => o.DischargeActivities).WithOptional().HasForeignKey(k => k.Case_PhstsyId);
modelBuilder.Entity<Case_PHTSY>().HasOptional(o => o.F_FamilyHistory).WithRequired();
modelBuilder.Entity<Case_PHTSY>().HasMany(o => o.PHTSY_CensusCodes).WithOptional().HasForeignKey(k => k.Case_PHTSYId);
the primary table:
CREATE TABLE [dbo].[Case_PHTSY](
[Id] [int] IDENTITY(5000,1) NOT FOR REPLICATION NOT NULL,
[FamilyHistoryID] [int] NULL,
[IntensityNHours] [smallint] NULL,
[IEPRequested] [bit] NULL CONSTRAINT [DF_Case_PHTSY_IEPRequested] DEFAULT (0),
...
[Kidnet] [bit] NULL,
CONSTRAINT [PK_Case_PHTSY] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
ALTER TABLE [dbo].[Case_PHTSY] WITH NOCHECK ADD CONSTRAINT [FK_Case_PHTSY_F_FamilyHistory] FOREIGN KEY([FamilyHistoryID])
REFERENCES [dbo].[F_FamilyHistory] ([FamilyHistoryID])
ON DELETE CASCADE
NOT FOR REPLICATION
GO
ALTER TABLE [dbo].[Case_PHTSY] CHECK CONSTRAINT [FK_Case_PHTSY_F_FamilyHistory]
GO
ALTER TABLE [dbo].[Case_PHTSY] WITH CHECK ADD CONSTRAINT [FK_Case_PHTSY_Persons] FOREIGN KEY([CaseChildID])
REFERENCES [dbo].[Persons] ([PersonID])
GO
ALTER TABLE [dbo].[Case_PHTSY] CHECK CONSTRAINT [FK_Case_PHTSY_Persons]
CREATE TABLE [dbo].[CP_ActualDischarge](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Case_PHTSYId] [int] NOT NULL,
[DischargeDate] [datetime] NULL,
CONSTRAINT [PK_CP_ActualDischarge] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
ALTER TABLE [dbo].[CP_ActualDischarge] WITH NOCHECK ADD CONSTRAINT [FK_CP_ActualDischarge_Case_PHTSY] FOREIGN KEY([Case_PHTSYId])
REFERENCES [dbo].[Case_PHTSY] ([Id])
ON DELETE CASCADE
NOT FOR REPLICATION
GO
ALTER TABLE [dbo].[CP_ActualDischarge] CHECK CONSTRAINT [FK_CP_ActualDischarge_Case_PHTSY]
CREATE TABLE [dbo].[CP_AgencyContacts](
[AgencyContactID] [int] IDENTITY(1,1) NOT FOR REPLICATION NOT NULL,
[Case_PHTSYId] [int] NOT NULL,
[AgencyType] [int] NULL,
[Agency] [int] NULL,
CONSTRAINT [PK_Case_PHTSY_AgencyContacts] PRIMARY KEY CLUSTERED
(
[AgencyContactID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
ALTER TABLE [dbo].[CP_AgencyContacts] WITH NOCHECK ADD CONSTRAINT [FK_CP_AgencyContacts_Case_PHTSY] FOREIGN KEY([Case_PHTSYId])
REFERENCES [dbo].[Case_PHTSY] ([Id])
ON DELETE CASCADE
NOT FOR REPLICATION
GO
ALTER TABLE [dbo].[CP_AgencyContacts] CHECK CONSTRAINT [FK_CP_AgencyContacts_Case_PHTSY]
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich hatte den gleichen Fehler. Schließlich verfolgt es auf eine falsche Beziehung. Ich war die Verknüpfung zwischen zwei primay keys in der Datenbank statt einer primären und einer Fremdsprache.
Es dauerte nur etwa eine Stunde Headbangen, aber ich kam zu einer Lösung, mit einem Hauch von einer anderen Reaktion. Die Kurzfassung ist, dass EntityFramework war verwirrt über einige der Beziehungen (oder meine Beschreibung mit fließend Ausdrücken war).
Ich schließlich bit die Kugel und bereinigt einige der Namen der Spalten in der Datenbank gemacht und Ihnen das 'übliche', d.h. tableName+Id entfernt, meine fließend Ausdrücken und es funktionierte.
Nahm ich auch aus einem zusammengesetzten Schlüssel, der auf einer Tabelle ein Id-Feld Hinzugefügt und aus dem zusammengesetzten Schlüssel, der einen eindeutigen index statt.
Ich hoffe, dies hilft jemand anderes.
Ich auch bestätigt meinen Verdacht, dass bei der Verwendung von SQL Server 2008 die Identität Anmerkung war nicht erforderlich. Die verwendete Datenbank war im Jahr 2005.
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identität)]
Musste ich manuell entfernen Sie eine schlechte Referenz in der .edmx.