2014-01-26 3 views
0

Я пытаюсь добавить более 1 таблицы в свой Appointement.dbml.Возможно ли иметь более 1 таблицы в файле xxx.dbml?

Я перетаскиваю таблицу назначения и врача.

Таблица Назначение определяется как aptId, patientId, doctorId, aptDate, HrDate, IsAvailable. Настольный доктор определяется как Id, doctorName.

Мне нужно обе таблицы, чтобы иметь возможность отображать имя врача в списке, чтобы выбрать и назначить.

Проблема у меня есть в Appointement.designer.cs У меня появилось много ошибок.

Ex .:

[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.Doctor")] 
public partial class Doctor : INotifyPropertyChanging, INotifyPropertyChanged 
{ 

private static PropertyChangingEventArgs emptyChangingEventArgs = new 
    PropertyChangingEventArgs(String.Empty); 

private int _Id; 

private string _Doctor_name; <=== Error The type 'Doctor' already contains a definition for 
             '_Doctor_name' 

Я ищу _Doctor_name, вот результаты:

[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Doctor_name", 
    DbType="NVarChar(50) NOT NULL", CanBeNull=false)] 
public string Doctor_name 
{ 
    get 
    { 
     return this._Doctor_name; 
    } 
    set 
    { 
     if ((this._Doctor_name != value)) 
     { 
      this.OnDoctor_nameChanging(value); 
      this.SendPropertyChanging(); 
      this._Doctor_name = value; 
      this.SendPropertyChanged("Doctor_name"); 
      this.OnDoctor_nameChanged(); 
     } 
    } 
} 

Может кто-нибудь объяснить мне, что случилось с файлом Appointement.designer.cs. Я пропустил один шаг? Я не понимаю, ошибки типа «Доктор» уже содержит определение для «» _Doctor_name

Спасибо за вашу помощь

Если он здесь мы внесли некоторые изменения в совместный два стола, а не в xxx.designer.cs?

<asp:LinqDataSource ID="LinqDataSource1" runat="server" 
    ContextTypeName="AppointementDataContext" 
    EnableDelete="True" EnableInsert="True" EnableUpdate="True" EntityTypeName="" 
    TableName="Appointement" 
     Where="IsAvailable = True && dateApt >= DateTime.Now && doctorId = @doctorId"> 

      <WhereParameters> 
       <asp:ControlParameter 
        Name="doctorsId" 
        ControlID="DropDownList1" 
        PropertyName="SelectedValue" 

        Type="String" /> 
      </WhereParameters> 

     </asp:LinqDataSource> 

Вот код в AppointementDoctor.aspx.cs

private void ListAppointement(int iIndexDdl) 
{ 
    using (AppointementDataContext db = new AppointementDataContext()) 
    { 
     var rdvItems = from Appointement in db.Appointement 
         where Appointement.doctorId == iIndexDdl && Appointement.isAvailable == 
     true && Appointement.dateApt >= DateTime.Now 
         select Appointement; 


        ListView1.DataSourceID = null; 
        ListView1.DataSource = rdvItems; 

        int numberOfRecords = rdvItems.Count(); 
        if (numberOfRecords == 0) 
        { 
         lblMessage.Text = "No Appointement is available"; 
        } 

        ListView1.DataBind(); 
    }; 
} 
+0

В назначении не следует сопоставить полей или свойств в таблицу «Доктор». Вы должны использовать запрос LINQ для извлечения дополнительных полей из связанной таблицы, ваша датамодель должна напоминать базу данных. Создавайте модели просмотра, если это необходимо для сложных ситуаций. – jessehouwing

+0

Я должен создать представление между двумя таблицами и поместить это представление вместо двух таблиц? Помните, что это заполнение ListView, теперь этот Listview не видит имя Doctor, так как это всего лишь ключ к таблице Doctor – user3127986

+0

извините, я исправил ошибку, это должно быть this._Doctor_name – user3127986

ответ

0

Есть таблица доктора в вашем DBML быть так же, как таблицы доктора в вашей базе данных и Teh AppointmentTable точно так же, как в вашем базы данных тоже.

Теперь в вашем коде добавить класс, который будет выступать в качестве модели представления для вашего пользовательского интерфейса, называют это сказать AppointmentDoctorViewModel ..

public class AppointmentDoctorViewModel 
{ 
    public int DoctorId {get;set;} 
    public string DoctorName {get;set;} 
    public string Subject{get;set;} 
    // etc, other fields for your ListView 
} 

Теперь в слое данных, Repository класса или в случае необходимости в вашем .aspx, написать запрос Linq, который накапливается класс вроде этого:

var viewData = from appointment in AppointementDataContext 
    select new AppointmentDoctorViewModel 
    { 
     DoctorId = appointment.Doctor.Id, 
     DoctorName = appointment.Doctor.Name, 
     Subject = appointment.Subject 
    }; 

использование ObjectDataSource связывать против ListView в вашем APX.

Это дает вам намного больше контроля и прекрасно отделяет слой данных от модели домена, с которой вы работаете.

Читайте на:.

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