2010-11-14 3 views
0

У меня есть несколько таблиц с одинаковой структурой (например, Queue1, Queue2 и т. Д.). Я должен держать их отдельно по административным причинам. Приложение может создавать некоторые таблицы очередей.Как управлять несколькими таблицами с одинаковой структурой

Я использую контекст данных и linq и C#.

Теперь я хочу выполнить операцию на всех таблицах. Таким образом, я возвращаю свои таблицы.

 IEnumerable<MetaTable> tables = appelsDataContext.Mapping.GetTables(); 
     foreach (MetaTable table in tables) 
     { 
     } 

Проще говоря, я хочу обновить поле userID во всех этих таблицах. Я не знаю, как это сделать, потому что с моей точки зрения dataContext, хотя таблицы имеют одинаковую структуру, все они разные.

Большое спасибо за любую помощь, которую вы можете предоставить. Приветствуется! Mathieu

ответ

1

Если вы посмотрите в свой DataClasses1.designer.cs-файл (или что-то еще, что вы его назвали) под dbml-файлом в проводнике решений, вы найдете свои классы как это.

[global::System.Data.Linq.Mapping.TableAttribute(Name="Production.Product")] 
public partial class Product : INotifyPropertyChanging, INotifyPropertyChanged 
{ 
//... 
[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ProductID", AutoSync=AutoSync.OnInsert, DbType="Int NOT NULL IDENTITY", IsPrimaryKey=true, IsDbGenerated=true)] 
public int ProductID 
{ 
    get 
    { 
     return this._ProductID; 
    } 
    set 
    { 
     if ((this._ProductID != value)) 
     { 
      this.OnProductIDChanging(value); 
      this.SendPropertyChanging(); 
      this._ProductID = value; 
      this.SendPropertyChanged("ProductID"); 
      this.OnProductIDChanged(); 
     } 
    } 
} 
//... 
} 

т.д.

Если вы создаете интерфейс

public interface ITableHasProductId 
{ 
    int ProductID {get; set;} 
} 

вы можете применять этот интерфейс для всех таблиц, поместите следующий код в отдельный файл (чтобы избежать потери изменений при регенерация контекста данных)

public partial class Product : ITableHasProductId {} 

Затем вы можете поместить все свои столы в IEnumrable<ITableHasProductId> и обновите ProductID.

+0

Awsome! Большое спасибо за Вашу помощь! – Mathieu

+0

Одна маленькая деталь. В вашем коде появляется сообщение об ошибке «public int ProductID {get; set;}», в котором говорится, что «публичный» модификатор там ошибается. Но как я могу получить доступ к этому полю таблицы ProductID, если он не является общедоступным? Тонкс снова! – Mathieu

+0

@Mathieu, я обновил свой ответ, не должно быть никакого публичного модификатора на членах интерфейса, они неявно публичны. –

Смежные вопросы