ThisKey列的数量与OtherKey列的数量不同

时间:2015-02-04 17:32:04

标签: c# linq windows-phone-8 linq-to-sql

我正在开发一个Windows Phone应用程序,我遇到了LINQ问题。当我尝试运行我的应用程序时,它显示消息:

  

未处理的类型' System.InvalidOperationException'发生在System.Data.Linq.dll

中      

附加信息:ThisKey列的数量与关联属性的Coletor'的OtherKey列数不同。在#Pessoa'类型中。

我已经尝试过在谷歌上找到的所有东西,但是没有用。有问题的文件如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Linq.Mapping;
using System.Data.Linq;

namespace Aplicativo_Windows_Phone
{
    #pragma warning disable 0169, 0649
    [Table(Name="Pessoas")]
    public class Pessoa
    {
        [Column(IsDbGenerated = true, IsPrimaryKey = true)]
        public int Id { get; set; }

        [Column]
        public string Nome { get; set; }

        [Column]
        public string Email { get; set; }

        [Column]
        public string Senha { get; set; }

        [Column]
        public string Profissao { get; set; }

        [Column]
        public int Idade { get; set; }

        [Column]
        public string Endereco { get; set; }

        [Column]
        public string Cidade { get; set; }

        [Column]
        public string Estado { get; set; }

        [Column(IsPrimaryKey = true, Name = "Coletor")]
        private int? coletorId;

        private EntityRef<Coletor> _coletor = new EntityRef<Coletor>();

        [Association(Name = "FK_Pessoas_PessoaColetores", IsForeignKey = true, Storage = "_coletor", ThisKey = "coletorId")]
        public Coletor Coletor
        {
            get { return _coletor.Entity; }
            set { _coletor.Entity = value; }
        }

        private EntitySet<PessoaColetor> _pessoaColetores = new EntitySet<PessoaColetor>();

        [Association(Name = "FK_PessoaColetores_Pessoa", Storage = "_pessoaColetores", OtherKey = "pessoaId", ThisKey = "Id")]
        private ICollection<PessoaColetor> PessoaColetores
        {
            get { return _pessoaColetores; }
            set { _pessoaColetores.Assign(value); }
        }

        public ICollection<Coletor> Coletores
        {
            get { return (from pc in PessoaColetores select pc.Coletor).ToList(); }
        }


    }
}


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Linq.Mapping;
using System.Data.Linq;
using Microsoft.Phone.Data.Linq;
using Microsoft.Phone.Data.Linq.Mapping;

namespace Aplicativo_Windows_Phone
{
#pragma warning disable 0169, 0649
    [Table(Name="Coletores")]
    public class Coletor
    {
        [Column(IsPrimaryKey = true, IsDbGenerated = true)]
        public int Id { get; set; }

        [Column]
        public float Latitude { get; set; }

        [Column]
        public float Longitude { get; set; }

        [Column]
        public string Nome { get; set; }

        private EntitySet<PessoaColetor> _pessoaColetores = new EntitySet<PessoaColetor>();
        [Association(Name = "FK_PessoaColetores_Coletor", Storage = "_pessoaColetores", ThisKey = "Id", OtherKey = "coletorId")]
        private ICollection<PessoaColetor> PessoaColetores
        {
            get { return _pessoaColetores; }
            set { _pessoaColetores.Assign(value); }
        }



        [Column(IsPrimaryKey = true, Name = "Ocorrencias")]
        private int? ocorrenciaId;

        private EntityRef<Ocorrencia> _ocorrencia = new EntityRef<Ocorrencia>();

        [Association(Name = "FK_Coletores_ColetorOcorrencias", IsForeignKey = true, Storage = "_ocorrencia", ThisKey = "ocorrenciaId")]
        public Ocorrencia Ocorrencia
        {
            get { return _ocorrencia.Entity; }
            set { _ocorrencia.Entity = value; }
        }

        private EntitySet<ColetorOcorrencia> _coletorOcorrencias = new EntitySet<ColetorOcorrencia>();

        [Association(Name = "FK_ColetorOcorrencias_Coletor", Storage = "_coletorOcorrencias",ThisKey = "Id", OtherKey = "coletorId")]
        private ICollection<ColetorOcorrencia> ColetorOcorrencias
        {
            get { return _coletorOcorrencias; }
            set { _coletorOcorrencias.Assign(value); }
        }

        public ICollection<Pessoa> Pessoas
        {
            get { return (from pc in PessoaColetores select pc.Pessoa).ToList(); }
        }

        public ICollection<Ocorrencia> Ocorrencias
        {
            get { return (from co in ColetorOcorrencias select co.Ocorrencia).ToList(); }
        }
    }
}


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Linq.Mapping;
using System.Data.Linq;
using Microsoft.Phone.Data.Linq;
using Microsoft.Phone.Data.Linq.Mapping;

namespace Aplicativo_Windows_Phone
{
#pragma warning disable 0169, 0649
    [Table(Name = "PessoaColetores")]
    class PessoaColetor
    {
        [Column(IsPrimaryKey = true, Name = "Coletor")]
        private int coletorId;
        private EntityRef<Coletor> _coletor = new EntityRef<Coletor>();
        [Association(Name = "FK_PessoaColetores_Coletores", IsForeignKey = true, Storage = "_coletor", ThisKey = "coletorId")]
        public Coletor Coletor
        {
            get { return _coletor.Entity; }
            set { _coletor.Entity = value; }
        }

        [Column(IsPrimaryKey = true, Name = "Pessoa")]
        private int pessoaId;
        private EntityRef<Pessoa> _pessoa = new EntityRef<Pessoa>();
        [Association(Name = "FK_PessoaColetores_Pessoas", IsForeignKey = true, Storage = "_pessoa", ThisKey = "pessoaId")]
        public Pessoa Pessoa
        {
            get { return _pessoa.Entity; }
            set { _pessoa.Entity = value; }
        }
    }
}

1 个答案:

答案 0 :(得分:2)

不应该是这个主键

[Column(IsPrimaryKey = true, Name = "Coletor")]
    private int? coletorId;

是外键

[Column(IsForeignKey= true, Name = "Coletor")]
    private int? coletorId;