Связи сущностей Linq to Sql (нецелые первичные ключи) - PullRequest
1 голос
/ 04 ноября 2008

Я играл с Linq в Sql, но столкнулся с проблемой при определении связей между сущностями.

У меня есть 2 таблицы, 1 - таблица транзакций клиента, а другая - справочная таблица, содержащая типы транзакций. Например, транзакция может иметь тип «CASH», а значение в таблице поиска будет иметь первичный ключ «CASH» и описание «Cash Payment».

Когда я запускаю свою тестовую программу, я получаю сообщение об ошибке «Невозможно привести объект типа System.Int32 к типу System.String», если я заменю первичный ключ в транзакции и таблицах поиска на целое число , программа работает как положено.

Я, вероятно, упускаю что-то фундаментальное, но я не уверен, что. Любая помощь приветствуется.

Вот код, который я использую для сопоставления моих таблиц:

[Table(Name = "customer")]
public class Customer
{
    [Column(IsPrimaryKey = true, Name = "customer_id")]
    public int CustomerID { get; set; }

    private EntitySet<Transaction> _Transactions;

    [Association(Storage = "_Transactions", OtherKey="CustomerID")]
    public EntitySet<Transaction> Transactions
    {
        get { return this._Transactions; }
        set { this._Transactions.Assign(value); }
    }

    public Customer()
    {
        this._Transactions = new EntitySet<Transaction>();
    }
}

[Table(Name = "custtran")]
public class Transaction
{
    [Column(Name = "compno", DbType="smallint")]
    public int CompanyNumber { get; set; }

    [Column(IsPrimaryKey = true, Name = "tran_no")]
    public int TranNo { get; set; }

    [Column(Name = "customer_id")]
    public int CustomerID { get; set; }

    [Column(Name = "tran_type", DbType="char(4)")]
    public string TranType { get; set; }

    private EntityRef<Customer> _Customer;

    [Association(Storage = "_Customer", ThisKey = "CustomerID")]
    public Customer Customer
    {
        get { return this._Customer.Entity; }
        set { this._Customer.Entity = value; }
    }

    private EntitySet<TransactionType> _TransactionTypes;
    [Association(Name="Custtran_TranType", Storage = "_TransactionTypes", IsForeignKey=true,  OtherKey = "TranType")]
    public EntitySet<TransactionType> TransactionTypes
    {
        get { return this._TransactionTypes; }
        set { this._TransactionTypes.Assign(value); }
    }

    public Transaction()
    {
       this._Customer = default(EntityRef<Customer>);
       this._TransactionTypes = new EntitySet<TransactionType>();
    }
}

[Table(Name = "tran_type")]
public class TransactionType
{
    [Column(Name = "compno", DbType = "smallint")]
    public int CompanyNumber { get; set; }

    [Column(IsPrimaryKey = true, Name = "tran_type", DbType="char(4)")]
    public string TranType { get; set; }

    [Column(Name = "description", DbType="Varchar(50)")]
    public string Description { get; set; }

    private EntityRef<Transaction> _Transaction;
    [Association(Name="Custtran_TranType", Storage = "_Transaction", ThisKey = "TranType")]
    public Transaction Transaction
    {
        get { return this._Transaction.Entity; }
        set { this._Transaction.Entity = value; }
    }

    public TransactionType()
    {
        this._Transaction = default(EntityRef<Transaction>);
    }
}

1 Ответ

1 голос
/ 04 ноября 2008

Игнорируй меня, я ответил на свой вопрос.

private EntitySet<TransactionType> _TransactionTypes;
    [Association(Name="Custtran_TranType", Storage = "_TransactionTypes", IsForeignKey=true, ThisKey="TranType", OtherKey = "TranType")]
    public EntitySet<TransactionType> TransactionTypes
    {
        get { return this._TransactionTypes; }
        set { this._TransactionTypes.Assign(value); }
    }

Добавлен ThisKey в Ассоциацию, и теперь он работает нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...