2017-02-21 2 views
2

Im mit EF Core und Im versucht, eine Spalte/Eigenschaft einer Entität zu aktualisieren.Warum aktualisiert EF Core Update eine geänderte Spalte nicht

Die Spalte hat eine Fremdschlüsseleinschränkung ... ist nullable und ist ein int.

Die gleiche Tabelle/Entität hat drei oder vier andere Spalten/Eigenschaften den gleichen Datentyp auch Fremdschlüssel gezwungen ... und Nullable-

Wenn ich die Werte eines dieses Spalts aktualisieren Sie den Update-Befehl ... Es funktioniert perfekt ... außer für eine Spalte. Wenn ich versuche, diese eine Spalte zu aktualisieren, und ich die Aktualisierung verarbeite, werden alle Änderungen gespeichert ... aber diese Spalte wird nur auf den vorherigen Wert zurückgesetzt.

Es wirft keine Ausnahmen ... keine Fehler jeglicher Art ... nur zurück auf den ursprünglichen Wert und fährt fort.

Unter dem Kontexteintrag für das Unternehmen ist .... ist die betreffende Spalte der car_app_id

gibt es nichts in der Kontext-Datei, die als von den anderen ... nichts, dass bestimmte Spalte unterscheidet in die Fremdschlüssel-Constraints, die von den anderen Spalten unterscheidet ...

  { 
      entity.HasKey(e => e.AppId) 
       .HasName("PK_tbl_apps"); 

    entity.ToTable("tbl_apps"); 

      entity.Property(e => e.AppId).HasColumnName("app_id"); 

    entity.Property(e => e.Active).HasColumnName("active"); 

    entity.Property(e => e.AppAcro) 
       .HasColumnName("app_acro") 
       .HasColumnType("varchar(50)"); 

    entity.Property(e => e.AppDesc) 
       .HasColumnName("app_desc") 
       .HasColumnType("varchar(5000)"); 

    entity.Property(e => e.AppTypeId).HasColumnName("app_type_id"); 

    entity.Property(e => e.BuildTypeId).HasColumnName("build_type_id"); 

    entity.Property(e => e.CarAppId).HasColumnName("car_app_id");  

    entity.Property(e => e.ControlLevelId).HasColumnName("control_level_id");  

    entity.Property(e => e.Deleted).HasColumnName("deleted"); 

    entity.HasOne(d => d.AppType) 
       .WithMany(p => p.TblApps) 
       .HasForeignKey(d => d.AppTypeId) 
       .HasConstraintName("FK_tbl_apps_tbl_app_types"); 

    entity.HasOne(d => d.BuildType) 
       .WithMany(p => p.TblApps) 
       .HasForeignKey(d => d.BuildTypeId) 
       .HasConstraintName("FK_tbl_apps_tbl_build_types"); 

    entity.HasOne(d => d.CarApp) 
       .WithMany(p => p.TblApps) 
       .HasForeignKey(d => d.CarAppId) 
       .HasConstraintName("FK_tbl_apps_tbl_car_apps"); 

    entity.HasOne(d => d.ControlLevel) 
       .WithMany(p => p.TblApps) 
       .HasForeignKey(d => d.ControlLevelId) 
       .HasConstraintName("FK_tbl_apps_tbl_control_level"); 


}); 

Dies ist der Code, den ich zu test..this verwenden ist einfacher Test-Code, um herauszufinden, warum funktioniert das Update ist nicht zu versuchen. Es ist sehr grundlegende Repository

So verwende ich eine Manager-Klasse für die Entität, um das Repository zu instanziieren und meine Daten aufrufen.

Grundsätzlich bekomme ich eine Reihe von Aufzeichnungen .. einen Datensatz auswählen ... aktualisieren Sie die Eigenschaften und senden Sie es zurück zu aktualisieren und jedes Feld wird nur gut aktualisiert..aber die Entität setzt die car_app_id-Eigenschaft auf was auch immer es ist zu meinem Modifizieren und ich verstehe nicht warum.

EalmsEF.AppManager manager = new EalmsEF.AppManager(); 
       var apps = manager.GetActiveFull().Where(a => a.CarAppId != null).ToList(); 
       var app = apps[0]; 
       app.CarAppId = 2; 
       app.BuildTypeId = 2; 
       manager.Update(app); 

Im Folgenden finden Sie einige Bilder, die die Konfiguration der Fremdschlüsselabhängigkeit für die Spalte und die Eigenschaften für die Spalte aus der Datenbank zeigen.

enter image description here enter image description here

wenn jemand eine Idee hat, warum diese eine Spalte ablehnen würde richtig zu aktualisieren, wäre es eine große Hilfe sein.

UPDATE :::

Ich habe SQL-Skripte erstellt, die die Datenbankstruktur und erzeugen Testdaten duplizieren. Im Grunde erstellen Sie eine Datenbank namens test..runt eh zwei Skripte mit dieser doppelten Datenbank erstellt das Problem kann repliziert werden.

USE [test] 
GO 

/****** Object: Table [dbo].[tbl_control_level] Script Date: 2/21/2017 3:30:29 PM ******/ 
SET ANSI_NULLS ON 
GO 

SET QUOTED_IDENTIFIER ON 
GO 

SET ANSI_PADDING ON 
GO 

CREATE TABLE [dbo].[tbl_control_level](
    [control_level_id] [int] IDENTITY(1,1) NOT NULL, 
    [control_level] [varchar](50) NULL, 
    [description] [varchar](1000) NULL, 
    [deleted] [bit] NULL, 

CONSTRAINT [PK_tbl_control_level] PRIMARY KEY CLUSTERED 
(
    [control_level_id] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY] 
) ON [PRIMARY] 

GO 

SET ANSI_PADDING OFF 
GO 



/****** Object: Table [dbo].[tbl_app_types] Script Date: 2/21/2017 3:29:51 PM ******/ 
SET ANSI_NULLS ON 
GO 

SET QUOTED_IDENTIFIER ON 
GO 

SET ANSI_PADDING ON 
GO 

CREATE TABLE [dbo].[tbl_app_types](
    [app_type_id] [int] IDENTITY(1,1) NOT NULL, 
    [app_type] [varchar](50) NULL, 
    [deleted] [bit] NULL, 
CONSTRAINT [PK_tbl_app_types] PRIMARY KEY CLUSTERED 
(
    [app_type_id] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY] 
) ON [PRIMARY] 

GO 

SET ANSI_PADDING OFF 
GO 


/****** Object: Table [dbo].[tbl_car_apps] Script Date: 2/21/2017 3:31:32 PM ******/ 
SET ANSI_NULLS ON 
GO 

SET QUOTED_IDENTIFIER ON 
GO 

SET ANSI_PADDING ON 
GO 

CREATE TABLE [dbo].[tbl_car_apps](
    [car_app_id] [int] IDENTITY(1,1) NOT NULL, 
    [car_id] [varchar](50) NULL,  
    [deleted] [bit] NULL, 
    CONSTRAINT [PK_tbl_car_apps] PRIMARY KEY CLUSTERED 
(
    [car_app_id] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY] 
) ON [PRIMARY] 

GO 

SET ANSI_PADDING OFF 
GO 



/****** Object: Table [dbo].[tbl_control_level] Script Date: 2/21/2017 3:30:29 PM ******/ 
SET ANSI_NULLS ON 
GO 

SET QUOTED_IDENTIFIER ON 
GO 

SET ANSI_PADDING ON 
GO 

CREATE TABLE [dbo].[tbl_control_level](
    [control_level_id] [int] IDENTITY(1,1) NOT NULL, 
    [control_level] [varchar](50) NULL, 
    [description] [varchar](1000) NULL, 
    [deleted] [bit] NULL, 

CONSTRAINT [PK_tbl_control_level] PRIMARY KEY CLUSTERED 
(
    [control_level_id] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY] 
) ON [PRIMARY] 

GO 

SET ANSI_PADDING OFF 
GO 




/****** Object: Table [dbo].[tbl_build_types] Script Date: 2/21/2017 3:29:15 PM ******/ 
SET ANSI_NULLS ON 
GO 

SET QUOTED_IDENTIFIER ON 
GO 

SET ANSI_PADDING ON 
GO 

CREATE TABLE [dbo].[tbl_build_types](
    [build_type_id] [int] IDENTITY(1,1) NOT NULL, 
    [build_type] [varchar](50) NULL, 
    [deleted] [bit] NULL, 
CONSTRAINT [PK_tbl_build_types] PRIMARY KEY CLUSTERED 
(
    [build_type_id] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY] 
) ON [PRIMARY] 

GO 

SET ANSI_PADDING OFF 
GO 


/****** Object: Table [dbo].[tbl_apps] Script Date: 2/21/2017 3:25:58 PM ******/ 
SET ANSI_NULLS ON 
GO 

SET QUOTED_IDENTIFIER ON 
GO 

SET ANSI_PADDING ON 
GO 

CREATE TABLE [dbo].[tbl_apps](
    [app_id] [int] IDENTITY(1,1) NOT NULL, 
    [app_acro] [varchar](50) NULL, 
    [app_name] [varchar](100) NULL, 
    [app_type_id] [int] NULL, 
    [control_level_id] [int] NULL, 
    [build_type_id] [int] NULL, 
    [car_app_id] [int] NULL, 
    [deleted] [bit] NULL, 

CONSTRAINT [PK_tbl_apps] PRIMARY KEY CLUSTERED 
(
    [app_id] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY] 
) ON [PRIMARY] 

GO 

SET ANSI_PADDING OFF 
GO 

ALTER TABLE [dbo].[tbl_apps] WITH CHECK ADD CONSTRAINT [FK_tbl_apps_tbl_app_types] FOREIGN KEY([app_type_id]) 
REFERENCES [dbo].[tbl_app_types] ([app_type_id]) 
GO 

ALTER TABLE [dbo].[tbl_apps] CHECK CONSTRAINT [FK_tbl_apps_tbl_app_types] 
GO 

ALTER TABLE [dbo].[tbl_apps] WITH CHECK ADD CONSTRAINT [FK_tbl_apps_tbl_build_types] FOREIGN KEY([build_type_id]) 
REFERENCES [dbo].[tbl_build_types] ([build_type_id]) 
GO 

ALTER TABLE [dbo].[tbl_apps] CHECK CONSTRAINT [FK_tbl_apps_tbl_build_types] 
GO 

ALTER TABLE [dbo].[tbl_apps] WITH CHECK ADD CONSTRAINT [FK_tbl_apps_tbl_car_apps] FOREIGN KEY([car_app_id]) 
REFERENCES [dbo].[tbl_car_apps] ([car_app_id]) 
GO 

ALTER TABLE [dbo].[tbl_apps] CHECK CONSTRAINT [FK_tbl_apps_tbl_car_apps] 
GO 

ALTER TABLE [dbo].[tbl_apps] WITH CHECK ADD CONSTRAINT [FK_tbl_apps_tbl_control_level] FOREIGN KEY([control_level_id]) 
REFERENCES [dbo].[tbl_control_level] ([control_level_id]) 
GO 

ALTER TABLE [dbo].[tbl_apps] CHECK CONSTRAINT [FK_tbl_apps_tbl_control_level] 
GO 




    USE [test] 
GO 

INSERT INTO [dbo].[tbl_app_types] 
      ([app_type] 
      ,[deleted]) 
    VALUES 
      ('app type 1' 
      ,0) 
GO 

INSERT INTO [dbo].[tbl_app_types] 
      ([app_type] 
      ,[deleted]) 
    VALUES 
      ('app type 2' 
      ,0) 
GO 


INSERT INTO [dbo].[tbl_build_types] 
      ([build_type] 
      ,[deleted]) 
    VALUES 
      ('build type 1' 
      ,0) 
GO 

INSERT INTO [dbo].[tbl_build_types] 
      ([build_type] 
      ,[deleted]) 
    VALUES 
      ('build type 2' 
      ,0) 
GO 

INSERT INTO [dbo].[tbl_control_level] 
      ([control_level] 
      ,[description] 
      ,[deleted]) 
    VALUES 
      ('ct 1' 
      ,'' 
      ,0) 
GO 

INSERT INTO [dbo].[tbl_control_level] 
      ([control_level] 
      ,[description] 
      ,[deleted]) 
    VALUES 
      ('ct 2' 
      ,'' 
      ,0) 
GO 

INSERT INTO [dbo].[tbl_car_apps] 
      ([car_id] 
      ,[deleted]) 
    VALUES 
      ('1' 
      ,0) 
GO 

INSERT INTO [dbo].[tbl_car_apps] 
      ([car_id] 
      ,[deleted]) 
    VALUES 
      ('2' 
      ,0) 
GO 

INSERT INTO [dbo].[tbl_apps] 
      ([app_acro] 
      ,[app_name] 
      ,[app_type_id] 
      ,[control_level_id] 
      ,[build_type_id] 
      ,[car_app_id] 
      ,[deleted]) 
    VALUES 
      ('testapp1' 
      ,'' 
      ,1 
      ,1 
      ,1 
      ,1 
      ,0) 
GO 

INSERT INTO [dbo].[tbl_apps] 
      ([app_acro] 
      ,[app_name] 
      ,[app_type_id] 
      ,[control_level_id] 
      ,[build_type_id] 
      ,[car_app_id] 
      ,[deleted]) 
    VALUES 
      ('testapp2' 
      ,'' 
      ,1 
      ,1 
      ,1 
      ,1 
      ,0) 
GO 
+0

Laden Sie mehr Daten, nachdem Sie Ihren Fremdschlüsselwert aktualisiert haben? –

+0

Welchen Weg geht die Beziehung? Würde die Aktualisierung des Schlüssels in der Autotabelle nicht die Beziehung mit der anderen Tabelle unterbrechen? –

+0

Ich mache keine weitere Aktualisierung oder das Laden von Daten. Es ist einfach, den Datensatz zu ändern, ändern Sie die Eigenschaften und aktualisieren Sie die Entität. Zum Aktualisieren des Schlüssels .. Ich aktualisiere den Schlüssel in der Autotabelle nicht. Ich aktualisiere die referenzierende Spalte in der App-Tabelle zu einem anderen brauchbaren Datensatz in der Autotabelle. – Bastyon

Antwort

0

Sieht aus wie ich es herausgefunden habe.

Nach einigen weiteren Untersuchung ist es das, was ich entdeckt ...

Die Einheit, die mit einer Include auf einem Navigations object..so diesem instance..the CarApp Objekt in der eingeschlossen war, wurde erhalten aktualisiert wurde "Get" auf der Platte. Aus irgendeinem Grund führte dies dazu, dass das Update die Änderungen auf den Wert zurücksetzte, auf den der Wert in der Navigationseigenschaft festgelegt war.

Aus Neugier habe ich die anderen Eigenschaften hinzugefügt, wie auf der Get enthalten und es begann das gleiche Verhalten mit ihnen ... als ich alle includes der Navigationseigenschaften entfernt und versucht, das Update zu speichern, hat es gut funktioniert.

Also im Grunde, wenn Sie eine Aktualisierung für eine Entität mit einem Include der Navigationseigenschaft tun werden, ist die eingeschränkte Spalte für .. Sie müssen entweder diese Eigenschaft auch aktualisieren..oder sonst entfernen Sie die Referenz aus der aktualisierten Eigenschaft