2013-08-29 5 views
2

Использование структуры сущности Я сохраняю два разных объекта в базе данных таким же образом.Entity Framework не сохраняет объект в базе данных

Один объект вставляется (он генерирует следующий SQL):

exec sp_executesql N'insert [dbo].[ImportJob]([SourceSystemId], [Start], [Source], [ImportType], [IsReadCompleted], [IsValidated], [IsImportCompleted]) 
values (@0, @1, @2, @3, @4, @5, @6) 
select [Id] 
from [dbo].[ImportJob] 
where @@ROWCOUNT > 0 and [Id] = scope_identity()',N'@0 uniqueidentifier,@1 datetime2(7),@2 nvarchar(1000),@3 int,@4 bit,@5 bit,@6 bit',@0='1A908EAE-9438-49A3-9784-C9D84F99D217',@1='2013-08-29 14:46:58.3071350',@2=N'uploads\825d3e08-f795-45dc-aa8f-16e02dec3b29.xlsx',@3=1,@4=0,@5=0,@6=0 

Другой объект не вставлена, и он не возвращает ошибку. Только SQL EF создает для этого рамки заключается в следующем:

exec sp_executesql N'declare @generated_keys table([Id] uniqueidentifier) 
insert [dbo].[ImportOrganization]([ImportJobId], [Import_ExistingId], [Import_SourceSystemPk], [Import_IsNew], [Import_IsUpdated], [Import_IsRemoved], [SourcePk], [OrganizationTypeText], [Name], [OrganizationTypeId], [MissionStatement], [Address_Street], [Address_Number], [Address_Postcode], [Address_City], [PhoneNumber], [Website], [EmailAddress], [BankAccount], [BankAccountHolder]) 
output inserted.[Id] into @generated_keys 
values (@0, null, @1, @2, @3, @4, @5, @6, @7, @8, @9, @10, @11, @12, @13, @14, @15, @16, @17, @18) 
select t.[Id], t.[TimeStamp] 
from @generated_keys as g join [dbo].[ImportOrganization] as t on g.[Id] = t.[Id] 
where @@ROWCOUNT > 0',N'@0 int,@1 nvarchar(max) ,@2 bit,@3 bit,@4 bit,@5 nvarchar(max) ,@6 nvarchar(100),@7 nvarchar(100),@8 int,@9 nvarchar(1000),@10 nvarchar(100),@11 nvarchar(20),@12 nvarchar(10),@13 nvarchar(100),@14 nvarchar(20),@15 nvarchar(200),@16 nvarchar(200),@17 nvarchar(50),@18 nvarchar(100)',@0=20,@1=N'1',@2=1,@3=0,@4=0,@5=N'1',@6=N'Bla Bla',@7=N'Test bla',@8=1,@9=N'bla bla bla mission',@10=N'Street',@11=N'1',@12=N'30010',@13=N'Blaa',@14=N'0140 123 45 678',@15=N'www.test.org',@16=N'[email protected]',@17=N'123456789',@18=N'Bla Bla' 
go 

обновление: код EF

Это из GenericRepository.cs (на основе этого tutorial):

public virtual void Insert(TEntity entity) { 
    dbSet.Add(entity); 
} 

и соответствующий UnitOfWork.cs:

public void Save() { 
    context.SaveChanges(); 
} 

объект, который не может:

ImportOrganization item = new ImportOrganization(); 

item.Name = excelReader.GetString(1); 
item.OrganizationTypeText = excelReader.GetString(2); 
item.MissionStatement = excelReader.GetString(3); 
item.Address = new DAL.Entities.Address 
      { 
       Street = excelReader.GetString(4), 
       Number = excelReader.GetString(5), 
       Postcode = excelReader.GetString(6), 
       City = excelReader.GetString(7) 
      }; 
item.PhoneNumber = excelReader.GetString(8); 
item.Website = excelReader.GetString(9); 
item.EmailAddress = excelReader.GetString(10); 
item.BankAccount = excelReader.GetString(11); 
item.BankAccountHolder = excelReader.GetString(12); 
item.Import = new ImportEntity 
{ 
     SourceSystemPk = excelReader.GetString(0) 
}; 
item.ImportJob = _importJob; 
item.ImportJobId = _importJob.Id; 
item.SourcePk = excelReader.GetString(0); 

Вызов вставки и сохранить метод:

unitOfWork.ImportOrganizationRepository.Insert(item); 
unitOfWork.Save(); 

Почему EF не создать запрос импорта для нового объекта?

+0

Можете ли вы показать свой код, а также инструкции по импорту? – BenM

+0

Итак никаких исключений? Вы протестировали это с помощью панели linq, чтобы изолировать, являетесь ли вы ошибкой в ​​коде или sql? – BentOnCoding

+0

не сохраняет в linqpad. Нет ошибок. И ни один элемент в базе данных (да, я ищу в правильной базе данных) – jao

ответ

1

Основная причина этой проблемы: PEBKAC. Ваш скромный программист посмотрел в неправильную таблицу базы данных.

+1

+1 Ты не решил мою проблему, но хотя бы заставил меня улыбнуться :) – Eadel

Смежные вопросы