Проблема такая: есть БД с двумя таблицами, структура проста(напишу SQL запросом): Код | CREATE TABLE MachineModel( vcModel nvarchar(50), vcGazolineMark nvarchar(10) NOT NULL, fExpense float NOT NULL, CONSTRAINT PK_model PRIMARY KEY(vcModel) ) CREATE TABLE Transport( vcGrz nvarchar(10), vcModel nvarchar(50), vcRouteNumber nvarchar(10) NOT NULL, fDoxod float NOT NULL, CONSTRAINT PK_vcGrz PRIMARY KEY(vcGrz), CONSTRAINT FK_vcModel FOREIGN KEY(vcModel) REFERENCES MachineModel(vcModel) )
|
Пишу два класса для LINQ to SQL: Код | [Table(Name = "MachineModel")] public class MachineModelMy { [Column(IsPrimaryKey = true)] public string vcModel;
[Column] public string vcGazolineMark;
[Column] public Double fExpense; [Association(Name = "MachineModel_Transport", ThisKey = "vcModel", OtherKey = "vcModel")] public EntitySet<TransportMy> _Transport; } [Table(Name = "Transport")] public class TransportMy {
[Column(IsPrimaryKey = true)] public string vcGrz;
[Column] public string vcModel;
[Column] public string vcRouteNumber;
[Column] public double fDoxod;
[Association(Name = "MachineModel_Transport", ThisKey = "vcModel", OtherKey = "vcModel", IsForeignKey = true)] public EntityRef<MachineModelMy> _machModel; }
|
И вот такая логика: Код | DataContext db = new DataContext(......); db.Log = Console.Out; Console.Write(' '); Table<MachineModelMy> machModel = db.GetTable<MachineModelMy>(); IQueryable<MachineModelMy> machineModel = from mach in machModel where mach.vcGazolineMark == "АИ98" select mach; TransportMy tr = new TransportMy { fDoxod = 900, vcGrz = "k352ky", vcRouteNumber = "90", vcModel = "мой" };
foreach (var item in machineModel) { item._Transport = new EntitySet<TransportMy>(); item._Transport.Add(tr); tr._machModel.Entity = item; } db.SubmitChanges();
|
Вроде все правильно и особо ничего сложного не написал, запускаю и получаю такое красивое исключение на db.SubmitChanges(): Не удалось найти член ключа "vcModel" ключа "vcModel" для типа "EntityRef`1". Ключ может быть неверным либо поле или свойство для "EntityRef`1" содержит измененные имена. Решил пойти другим путем и содрать этот класс из того что создает дизайнер VS(забыл как называется) и из получившегося содрал кое-что, в итоге получил практически тоже самое: Код | [Table(Name = "MachineModel")] public class MachineModelMy { [Column(IsPrimaryKey = true)] public string vcModel;
[Column] public string vcGazolineMark;
[Column] public Double fExpense;
private EntitySet<TransportMy> _Transport;
[Association(Name = "MachineModel_Transport", Storage = "_Transport", ThisKey = "vcModel", OtherKey = "vcModel")] public EntitySet<TransportMy> Transport { get { return this._Transport; } set { this._Transport.Assign(value); } } } [Table(Name = "Transport")] public class TransportMy {
[Column(IsPrimaryKey = true)] public string vcGrz;
[Column] public string vcModel;
[Column] public string vcRouteNumber;
[Column] public double fDoxod;
private EntityRef<MachineModelMy> _MachineModel;
[Association(Name = "MachineModel_Transport", Storage = "_MachineModel", ThisKey = "vcModel", OtherKey = "vcModel", IsForeignKey = true)] public MachineModelMy MachineModel { get { return this._MachineModel.Entity; } set { MachineModelMy previousValue = this._MachineModel.Entity; if (((previousValue != value) || (this._MachineModel.HasLoadedOrAssignedValue == false))) { //this.SendPropertyChanging(); if ((previousValue != null)) { this._MachineModel.Entity = null; previousValue.Transport.Remove(this); } this._MachineModel.Entity = value; if ((value != null)) { value.Transport.Add(this); this.vcModel = value.vcModel; } else { this.vcModel = default(string); } //this.SendPropertyChanged("MachineModel"); } } } }
|
Код поменял так: Код | foreach (var item in machineModel) { tr.MachineModel = item; item.Transport.Add(tr); }
|
При той же логике это работает, разницы в коде я не вижу. В чем проблема?
|