Отображение отношений один к одному с помощью составного ключа - PullRequest
0 голосов
/ 09 августа 2010

У меня есть такая база данных: у меня вопрос «Как отобразить эту базу данных с помощью активной записи замка?»

альтернативный текст http://cA4.upanh.com/11.396.15558077.LNS0/onetoonewithcompositekey.jpg Я пробовал этот код: Campaign:

[ActiveRecord("[Campaign]")]
    public class Campaign : ActiveRecordBase<Campaign>
    {
        private long m_ID;
        [PrimaryKey(Column = "`ID`")]
        public long ID
        {
            get { return m_ID; }
        set { m_ID = value; }
    }
        //// Properties ...
        private IList<MessageOfCampaign> m_MessageOfCampaign = new List<MessageOfCampaign>();
        [HasMany(typeof(MessageOfCampaign),
            Table = "`MessageOfCampaign`",            
            ColumnKey = "`CampaignID`")]
        public IList<MessageOfCampaign> MessagesOfCampaign
        {
            get { return m_MessageOfCampaign; }
            set { m_MessageOfCampaign = value; }
        }
    }

MessageOfCampaign:

[Serializable]
    public class MessageOfCampaignKey
    {
        private long m_MessageID;
        [KeyProperty(Column = "`MessageID`")]
        public long MessageID
        {
            get { return m_MessageID; }
            set { m_MessageID = value; }
        }

        private long m_CampaignID;
        [KeyProperty(Column = "`CampaignID`")]
        public long CampaignID
        {
            get { return m_CampaignID; }
            set { m_CampaignID = value; }
        }

        public override bool Equals(object obj)
        {
            if (this == obj)
            {
                return true;
            }

            MessageOfCampaignKey key = obj as MessageOfCampaignKey;

            if (key == null)
            {
                return false;
            }
            if (m_CampaignID != key.m_CampaignID || !m_MessageID.Equals(key.m_MessageID))
            {
                return false;
            }
            return true;
        }

        public override int GetHashCode()
        {
            return this.m_CampaignID.GetHashCode() ^ this.m_MessageID.GetHashCode();
        }
    }

    [ActiveRecord("[MessageOfCampaign]")]
    public class MessageOfCampaign : ActiveRecordBase<MessageOfCampaign>
    {
        private MessageOfCampaignKey m_Key;
        [CompositeKey]
        public MessageOfCampaignKey Key
        {
            get { return m_Key; }
            set { m_Key = value; }
        }

        private Message m_Message;
        [OneToOne]
        public Message Message
        {
            get { return m_Message; }
            set { m_Message = value; }
        }

        private Campaign m_Campaign;
        [BelongsTo("`CampaignID`")]
        public Campaign Campaign
        {
            get { return m_Campaign; }
            set { m_Campaign = value; }
        }
    }

Сообщение:

[ActiveRecord("[Message]")]
    public class Message : ActiveRecordBase
    {
        private long m_ID;
        [PrimaryKey(Column = "`ID`")]
        public long ID
        {
            get { return m_ID; }
            set { m_ID = value; }
        }
        //// Properties ...

        [OneToOne]
        public MessageOfCampaign MessageOfCampaign
        {
            get { return this.m_MessageOfCampaign; }
            set { this.m_MessageOfCampaign = value; }
        }
     }

Но я получил ошибку:

отображение поврежденного столбца для: MessageOfCampaign.id of: IMobileMarketing.Models.Message, компонент типа [MessageID, CampaignID] ожидает 2 столбца, но 1 сопоставлен

1 Ответ

1 голос
/ 31 августа 2010

Там, кажется, что-то не так с вашей диаграммой ER там.Разве это не должно быть двух 1- * отношений?Тогда вы можете просто отобразить его, используя атрибут HasAndBelongsToMany.Например,

[ActiveRecord("[Campaign]")]
public class Campaign : ActiveRecordBase<Campaign>
{
   private IList<Message> m_Messages;

    [HasAndBelongsToMany(typeof(Message), 
        Table="MessageOfCampaign", ColumnKey="CapaignId", ColumnRef="MessageId")]
    public IList<Message> Messages
    {
        get { return m_Messages; }
        set { m_Messages = value; }
    }

   ...
}

[ActiveRecord("[Message]")]
public class Message : ActiveRecordBase
{
       private IList<Capaign> m_Capaigns;

        [HasAndBelongsToMany(typeof(Capaign), 
            Table="MessageOfCampaign", ColumnKey="MessageId", ColumnRef="CapaignId")]
        public IList<Capaign> Capaigns
        {
            get { return m_Capaigns; }
            set { m_Capaigns = value; }
        }

   ...
}
...