实体框架映射与链接表

时间:2015-12-05 16:46:54

标签: c# mapping entity dbcontext

我有数据库结构,包含2个表和1个链接表,用于关系零到多个:

Clients {
   Id number (primary key), 
   ...
}

Solutions {
  Id number (primary key),
  ...
}

ClientSolutions {
  Id_Solution number (primary key)
  Id_Client number, 
}

客户有零个或多个解决方案,解决方案有零个或一个客户端。

上下文中的流畅映射:

    modelBuilder.Entity<client>()
        .HasMany(u => u.solutions).WithOptional(x=>x.client)
        .Map(x => x.MapKey(new[] { "Id_Client","Id_Solution" })        
        .ToTable("ClientSolutions"));

测试用例:

var q = from c in context.clients
        from s in c.solutions
        select { c.id, s.id }

声明的导航属性client.solutions的类型与指定导航的结果不兼容

我做错了什么?我无法改变数据库的结构:(

1 个答案:

答案 0 :(得分:1)

您不需要关系表来执行此操作,我建议您执行类似的操作:

 public class Client
 {
   public long Id { get; set; }
   public virtual IList<Solution> Solutions { get; set; }
 }
 public class Solution
 {
   public long Id { get; set; }
   public long? ClientId { get; set; }
   public virtual Client Client { get; set; }
 }     

客户端实体配置:

modelBuilder.Entity<Client>()
    .HasMany(c => c.Solutions).WithOptional()
    .HasForeignKey(s => s.ClientId)
    .WillCascadeOnDelete(false);

解决方案实体配置:

modelBuilder.Entity<Solution>()
     .HasOptional(t => t.Client)
     .WithMany(c => c.Solutions)
     .HasForeignKey(s => s.ClientId)
     .WillCascadeOnDelete(false);

我希望能够清楚有用,X)