我有数据库结构,包含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的类型与指定导航的结果不兼容
我做错了什么?我无法改变数据库的结构:(
答案 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)