2015-03-20 2 views
0

Я хотел бы выполнить транзакцию с использованием LINQ и SQL Server CE.Изменения не отображаются в данных таблицы

SubmitChanges способ, похоже, хорошо. Но если я смотрю в таблице данных, изменения не применяются.

Мой код:

var query = (from s in this.tblRequirements 
where s.abbrevation == "rml" 
select new {s}).First(); 

System.Windows.Forms.MessageBox.Show("First: " + query.s.abbrevation); 

query.s.abbrevation = "rmlas"; 

try 
{ 
    this.rdb.SubmitChanges(); 
} 
catch (ChangeConflictException e) 
{ 
    System.Windows.Forms.MessageBox.Show(e.ToString()); 
} 

System.Windows.Forms.MessageBox.Show("Second: " + query.s.abbrevation); 

query = (from s in this.tblRequirements 
     where s.requirementID == 4 
     select new { s }).First(); 

System.Windows.Forms.MessageBox.Show("Third: " + query.s.abbrevation); 

выход Сообщение:

First = "rml" 
Second = "rmlas" 
Third = "rmlas" 

Мой стол:

[requirementID] INT   IDENTITY (1, 1) NOT NULL, 
[credentialID] INT   DEFAULT (NULL) NULL, 
[softwareName] NCHAR(30)  NOT NULL, 
[abbrevation] NCHAR(10)  NOT NULL, 
[uri]   NVARCHAR(MAX) DEFAULT (NULL) NULL, 
[version]  NCHAR(15)  DEFAULT (NULL) NULL, 
[installPath] TEXT   DEFAULT (NULL) NULL, 
[samedir]  BIT   DEFAULT ((0)) NULL, 
[subPathID]  INT   NULL, 

PRIMARY KEY CLUSTERED ([requirementID] ASC), 
CONSTRAINT [FK_RequirementsAnnotation_Credentials] 
    FOREIGN KEY ([credentialID]) 
    REFERENCES [dbo].[Credential] ([credentialID]), 
CONSTRAINT [FK_RequirementsAnnotation_SubPath] 
    FOREIGN KEY ([subPathID]) 
    REFERENCES [dbo].[SubPath] ([subPathID]) 

Выход консоли:

> SELECT TOP (1) [t0].[requirementID], [t0].[credentialID], 
> [t0].[softwareName], [t0].[abbrevation], [t0].[uri], [t0].[version], 
> [t0].[installPath], [t0].[samedir], [t0].[subPathID] FROM 
> [dbo].[RequirementsAnnotation] AS [t0] WHERE [t0].[abbrevation] = @p0 
> -- @p0: Input NVarChar (Size = 4000; Prec = 0; Scale = 0) [rml] 
> -- Context: SqlProvider(Sql2008) 
> Model: AttributedMetaModel Build: 4.0.30319.33440 
> 
> UPDATE [dbo].[RequirementsAnnotation] SET [abbrevation] = @p7 WHERE 
> ([requirementID] = @p0) AND ([credentialID] = @p1) AND ([softwareName] 
> = @p2) AND ([abbrevation] = @p3) AND ([uri] = @p4) AND ([version] = @p5) 
> AND ([installPath] IS NULL) AND (NOT ([samedir] = 1)) AND 
> ([subPathID] = @p6) 
> -- @p0: Input Int (Size = -1; Prec = 0; Scale = 0) [4] 
> -- @p1: Input Int (Size = -1; Prec = 0; Scale = 0) [1] 
> -- @p2: Input NChar (Size = 30; Prec = 0; Scale = 0) [repeats ] 
> -- @p3: Input NChar (Size = 10; Prec = 0; Scale = 0) [rml  ] 
> -- @p4: Input NVarChar (Size = 4000; Prec = 0; Scale = 0) [xyz] 
> -- @p5: Input NChar (Size = 15; Prec = 0; Scale = 0) [20140131  ] 
> -- @p6: Input Int (Size = -1; Prec = 0; Scale = 0) [2] 
> -- @p7: Input NChar (Size = 10; Prec = 0; Scale = 0) [rmlas] 
> -- Context: SqlProvider(Sql2008) Model: AttributedMetaModel 

Этот результат появляется после каждого вызова.

+0

В какой базе данных вы проверяете и не видели изменения в ней? База данных, расположенная в папке отладки? или в основной папке в вашем решении? –

+0

База данных - это требованиеAnnotation и находится в DebugFolder в ./Databases (mdf, dbml) – ANKH

+0

Вы используете TransactionScope (без вызова полного) в любой точке вашей программы? В противном случае я подозреваю, что либо вы ищете неправильную базу данных, либо ваша база данных перезаписывается (возможно, когда вы строите свой проект). – sgmoore

ответ

0

Я использую этот код для обновления, и вы можете ему помочь. это хорошо работает для меня. если он не работает для вас, у вас есть другие ошибки, а не в том коде, который вы отправляете.

using (phoneDBContext db1 = new phoneDBContext()) 
       { 
        IQueryable<Project> cityQuery = from c in db1.Projects 
                where c.Id == 56 
                select c; 
        Project p = cityQuery.FirstOrDefault(); 
        p.Project_name = "rmlas"; 
        db1.SubmitChanges(); 
       } 
+0

Что вы изменили? – ANKH

+0

я изменение 2 предмет. this.tblRequirements к rdb.tblRequirements и this.rdb.SubmitChanges(); на rdb.SubmitChanges() ;. , его работа сейчас? –

+0

, к сожалению, нет. После вызова программа сохраняет новые данные. Но после отзыва данные теряются. – ANKH