2017-01-30 7 views
0

私は、Entity Frameworkコードファースト(流暢なAPIマッピングを含む)アプローチを使用して1対1のマッピングを作成しようとしています。私がコードを最初に使っているのはこれが初めてです。Entity Frameworkコードファーストアプローチ1対1の流暢なAPIマッピング

オペランドタイプ衝突:UNIQUEIDENTIFIERは私が流暢なAPIで何か間違ったことをやっていると思われるint型

と互換性がありません。私はUpdateTaskCompleted()メソッドを実行すると

は、それが次の例外がスローされますマッピング。

[Table("tblSession")] 
public partial class tblSession 
{ 
     [Key] 
     public Guid SessionId { get; set; } 

     [Required] 
     public bool IsActive { get; set; } 

     public tblTaskDetail tblTaskDetail { get; set; } 
} 

[Table("tblTaskDetail")] 
public partial class tblTaskDetail 
{ 
    [Key] 
    public int TaskDetailID { get; set; } 

    public Guid? SessionID { get; set; } 

    [Required] 
    [StringLength(50)] 
    public string TaskStatus { get; set; } 

    [ForeignKey("SessionID")] 
    public tblSession tblSession { get; set; } 
} 

public class RequestSession 
{ 
    [Key] 
    public Guid SessionId { get; set; } 
    public bool IsActive { get; set; } 
    public TaskDetail TaskDetail { get; set; } 
} 

public class TaskDetail 
{ 
    [Key] 
    public int TaskDetailID { get; set; } 
    public Guid? SessionID { get; set; } 
    public string TaskStatus { get; set; } 
    public RequestSession RequestSession { get; set; } 
} 

public class TaskDetailMapper:EntityTypeConfiguration<TaskDetail> 
{ 
    public TaskDetailMapper() 
    { 
     this.ToTable("tblTaskDetail"); 
     this.HasKey(hk => hk.TaskDetailID); 
     HasRequired<RequestSession>(a => a.RequestSession) 
          .WithRequiredPrincipal(o => o.TaskDetail).Map(m => m.MapKey("SessionID")); 

     this.Property(o => o.TaskStatus).HasColumnName("TaskStatus"); 
    } 
} 

public class RequestSessionMapper : EntityTypeConfiguration<RequestSession> 
{ 
    public RequestSessionMapper() 
    { 
     // Table & Column Mappings 
     this.ToTable("tblSession"); 

     //Primary key 
     this.HasKey<Guid>(hk => hk.SessionId); 
     this.Property(t => t.SessionId).HasColumnName("SessionId"); 
     this.Property(t => t.IsActive).HasColumnName("IsActive"); 
    } 
} 

public partial class WarehouseAPIContext : DbContext 
{ 
    public WarehouseAPIContext(): base("name=WarehouseAPIContext") 
    { 
    } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    {   
     modelBuilder.Configurations.Add(new RequestSessionMapper()); 
     modelBuilder.Configurations.Add(new TaskDetailMapper()); 
    } 
} 

public TaskDetail UpdateTaskCompleted(TaskDetail entity) 
{ 
     try 
     { 
      var entry = dbSet.Find(entity.TaskDetailID); 
      entry.TaskStatus = entity.TaskStatus; 

      entity.RequestSession = new RequestSession() 
      { 
       IsActive = false 
      }; 

      _context.SaveChanges(); 

      return entity; 
     } 
     catch (Exception ex) 
     { 
      throw ex; 
     } 
} 

答えて

0

TaskDetail.Idはint型で、Session.IdはGuid型です。

0

まず、モデルを設定するためにAnnotationまたはFluentAPIを使用することを選択します。フィーチャは1つのアプローチでしか実行できず、他のアプローチでは実行できないエッジケースがありますが、これらはほんの一握りであり、よく文書化されているにすぎません。

私はFluentAPIをより表現力豊かに使用しており、すべての構成を1か所に収めることができます。

あなたがここに行うために必要なもの、EFの関係上、この非常に優れたリソースをチェックアウトです:http://www.entityframeworktutorial.net/entity-relationships.aspx

任意のエンティティフレームワークの問題/機能のために、Googleが最初のページにその上位の結果でこのサイトを持つことになります - 乗り質問をする前に良い調査をしてください - 誰もが答えを手伝ってくれるだけでなく、あなたの問題に対する解決策を探して資料を研究して読むことによって、本当の価値が出てくるところです。あなたの現在の問題を解決する方法だけではありません。

関連する問題