2011-01-07 3 views
2

엔티티 프레임 워크 오류 던지고 EntitySet 바이너리 데이터를 업데이트 할 수 없습니다엔티티 프레임 워크

Test 'WorkerProcessService.Test.WorkerProcessMonitorTests.Test' failed: System.Data.UpdateException : Unable to update the EntitySet 'Processor' because it has a DefiningQuery and no <InsertFunction> element exists in the <ModificationFunctionMapping> element to support the current operation. 
at System.Data.SqlClient.SqlGen.DmlSqlGenerator.ExpressionTranslator.Visit(DbScanExpression expression) 
at System.Data.Common.CommandTrees.DbScanExpression.Accept(DbExpressionVisitor visitor) 
at System.Data.SqlClient.SqlGen.DmlSqlGenerator.GenerateInsertSql(DbInsertCommandTree tree, SqlVersion sqlVersion, List`1& parameters) 
at System.Data.SqlClient.SqlGen.SqlGenerator.GenerateSql(DbCommandTree tree, SqlVersion sqlVersion, List`1& parameters, CommandType& commandType, HashSet`1& paramsToForceNonUnicode) 
at System.Data.SqlClient.SqlProviderServices.CreateCommand(DbProviderManifest providerManifest, DbCommandTree commandTree) 
at System.Data.SqlClient.SqlProviderServices.CreateCommand(DbCommandTree commandTree) 
at System.Data.Mapping.Update.Internal.UpdateTranslator.CreateCommand(DbModificationCommandTree commandTree) 
at System.Data.Mapping.Update.Internal.DynamicUpdateCommand.CreateCommand(UpdateTranslator translator, Dictionary`2 identifierValues) 
at System.Data.Mapping.Update.Internal.DynamicUpdateCommand.Execute(UpdateTranslator translator, EntityConnection connection, Dictionary`2 identifierValues, List`1 generatedValues) 
at System.Data.Mapping.Update.Internal.UpdateTranslator.Update(IEntityStateManager stateManager, IEntityAdapter adapter) 
at System.Data.EntityClient.EntityAdapter.Update(IEntityStateManager entityCache) 
at System.Data.Objects.ObjectContext.SaveChanges(SaveOptions options) 
at System.Data.Objects.ObjectContext.SaveChanges() 
WorkerProcessMonitor.cs(79,0): at Star.Portal.Services.WorkerProcessMonitor.AddComponent(Byte[] component) 
WorkerProcessMonitorTests.cs(55,0): at WorkerProcessService.Test.WorkerProcessMonitorTests.Test() 

을 나는 테이블 등을들 수 있으며, 자동 모델에게 edmx 생성 한

CREATE TABLE [dbo].[Processor](
    [ProcessorID] [int] IDENTITY(1,1) NOT NULL, 
    [ProcessorDLL] [varbinary](max) NULL, 
) 

는 folowing

를 업데이트 실패
public void AddComponent(byte[] component) 
     { 
      Processor p = new Processor() 
           { 
            ProcessorDLL = component, 
           }; 
      using (var cn = GetWorkerProcessEntities()) 
      { 

       cn.AddToProcessors(p); 
       cn.SaveChanges(); 
      } 

     } 

질문 : SQL Server에서 이진 저장 장치를 구현하기 위해 특정 작업을 수행해야합니까?

+0

http://www.dotnetmonster.com/Uwe/Forum.aspx/dotnet-ado-net/21686/EF-or-LINQtoSQL-and-VarBinary-Max –

+0

무엇이'cn, AddToProcessors (p);'정확히하는 것? – msarchet

+0

프로세서의 ProcessorID에 자동 증가를 설정 했습니까 ??? – Syeda

답변

1

간단한 대답 ... 아니요, 동일한 데이터 유형 (varbinary (max))을 가진 테이블에 이미지를 저장하고 있습니다.

코드에 대해 잘 모르는 경우 로컬 DB를 사용하여 간단한 테스트가 있습니다. 이것은 내 POCO 및 DBcontext입니다. 이 도움이

ProcessorID: 1 
ProcessorDLL: 0xFFD8FFE000104A46494600010200... 

희망 : 나는 새로운 프로세서를 추가 할 때

using System.Data.Entity.ModelConfiguration; 
public class Processor 
{ 
    public int ProcessorId { get; set; } 
    public byte[] ProcessorDLL { get; set; } 
} 
public class ProcessorConfiguration : EntityTypeConfiguration<Processor> 
{ 
    public ProcessorConfiguration() 
    { 
     HasKey(i => i.ProcessorId); 

     ToTable("Processor", "dbo"); 
    } 
} 
//DbContext 
public class myContext : DbContext 
{ 
    public DbSet<Processor> Processors { get; set; } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Configurations.Add(new ProcessorConfiguration()); 
     base.OnModelCreating(modelBuilder); 
    } 
} 

그런 다음, 나는이

public void test() 
    { 
     myContext context = new myContext(); 

     Processor p = new Processor 
     { 
      ProcessorDLL = getSomeRandomByteArray() 
     }; 

     context.Processors.Add(p); 
     context.SaveChanges(); 
    } 

를 사용하여 내 테이블에 (I 자동 생성 edmx를 사용하지 말아).