Solved

Classes & Databases

Posted on 2009-05-04
9
192 Views
Last Modified: 2013-12-17
If i have a bunch of objects, from the class PERSON - i understand how to use it, save it to a database, etc...  Lets say I have a few thousand records of PERSON.  Is it better to bind it directly to a grid or better to pull them into classes and manually put them into the grid?
0
Comment
Question by:jlrray
  • 4
  • 3
9 Comments
 
LVL 62

Expert Comment

by:Fernando Soto
ID: 24298433
Hi jlrray;

Seeming you placed this question into the thread of Language Integrated Query - LINQ are you using .Net Framework 3.X?
Are you using Linq to access the Database?
Are you using MS SQL Server?
How is the data from PERSON stored in the database?

Fernando
0
 
LVL 1

Expert Comment

by:usmanr
ID: 24298617
in my opinion, direct binding will be efficient and will take less time than populating collection of objects and then binding the populated collection with the grid.
0
 

Author Comment

by:jlrray
ID: 24299881
1.  Yes, it is SQL Server
2.  I have not used LINQ for it, but am planning on it
3.  Originally the PERSON was saved to the database using SQL INSERT.

Previously, I always used a control that was data bound to a database.  For me, this just seems to create some pretty ugly work arounds.  I'm probably approaching this wrong.  For the most part, all of my objects are either PERSON or an ITEM of some sort.  You could probably think of it as more of an inventory style of database.

USMANR -- then if you were going to create a new entry, would you use the data bound control to enter directly to the database or would you create an object instance of a class and then push the whole thing to the database.

Joe
0
 
LVL 62

Expert Comment

by:Fernando Soto
ID: 24301154
Are you using Visual Studio 2008, .Net Framework 3.X?
0
How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

 

Author Comment

by:jlrray
ID: 24305873
Yes.  VS2008 & 3.5x

Joe
0
 
LVL 62

Expert Comment

by:Fernando Soto
ID: 24306986
Hi jlrray;

Seeming you are planning to use Linq to SQL. When you add the DataContext / ORM and place a table from your database into the DataContext it will create a class that matches the structure of that table as a strongly type class into your project. You can use this class in place of the one already in your project. Then you can assign the collection of returned values directly to the data source of the data grid view.

Fernando
0
 

Author Comment

by:jlrray
ID: 24332880
I'm not exactly familiar with this, however, it seems to me that this will create ambiguous code.  Maybe I'm not understanding this correctly.  If I have a class say MAN which inherits from a PERSON, with properties usually associated with a Man and methods like DrinkBeer(), -- the DataContext will createa  pseudo class for me that matches the structure--- but what will it look like?  Will it be intuitive?  For instance, if I want to save the record or access the property -- how would I call it?

Joe
0
 
LVL 62

Accepted Solution

by:
Fernando Soto earned 500 total points
ID: 24337220
To the question, "If I have a class say MAN which inherits from a PERSON, with properties usually associated with a Man and methods like DrinkBeer(), -- the DataContext will createa  pseudo class for me that matches the structure--- but what will it look like?"

The DataContext creates a strongly typed class and not a pseudo class. This strongly typed class maps the database structure to your code. Your class Man can be used by the query to fill it with the values that come from the database. The DataContext class is used to keep track of the records retrieved from the database as well as any changes made to those records so that the database may be updated with the changes. The DataContext class looks like any other C# class with attributes assigned to fileds of the database and some functions that the DataContext uses to maintain itself.

To the question, "Will it be intuitive?"

Yes it will be intuitive. The code snippet below shows the auto-generated code for the Northwind Database with just the Employee table.

To your question, "if I want to save the record or access the property -- how would I call it?"

The DataContext has a method called DataContext.SaveChanges() to save modified and inserted records and you access the properties as you would any other class in a C# program.

Fernando


#pragma warning disable 1591

//------------------------------------------------------------------------------

// <auto-generated>

//     This code was generated by a tool.

//     Runtime Version:2.0.50727.3082

//

//     Changes to this file may cause incorrect behavior and will be lost if

//     the code is regenerated.

// </auto-generated>

//------------------------------------------------------------------------------
 

namespace WindowsFormsApplication3

{

	using System.Data.Linq;

	using System.Data.Linq.Mapping;

	using System.Data;

	using System.Collections.Generic;

	using System.Reflection;

	using System.Linq;

	using System.Linq.Expressions;

	using System.ComponentModel;

	using System;

	

	

	[System.Data.Linq.Mapping.DatabaseAttribute(Name="Northwind")]

	public partial class NorthwindDataContext : System.Data.Linq.DataContext

	{

		

		private static System.Data.Linq.Mapping.MappingSource mappingSource = new AttributeMappingSource();

		

    #region Extensibility Method Definitions

    partial void OnCreated();

    partial void InsertEmployees(Employees instance);

    partial void UpdateEmployees(Employees instance);

    partial void DeleteEmployees(Employees instance);

    #endregion

		

		public NorthwindDataContext() : 

				base(global::WindowsFormsApplication3.Properties.Settings.Default.NorthwindConnectionString, mappingSource)

		{

			OnCreated();

		}

		

		public NorthwindDataContext(string connection) : 

				base(connection, mappingSource)

		{

			OnCreated();

		}

		

		public NorthwindDataContext(System.Data.IDbConnection connection) : 

				base(connection, mappingSource)

		{

			OnCreated();

		}

		

		public NorthwindDataContext(string connection, System.Data.Linq.Mapping.MappingSource mappingSource) : 

				base(connection, mappingSource)

		{

			OnCreated();

		}

		

		public NorthwindDataContext(System.Data.IDbConnection connection, System.Data.Linq.Mapping.MappingSource mappingSource) : 

				base(connection, mappingSource)

		{

			OnCreated();

		}

		

		public System.Data.Linq.Table<Employees> Employees

		{

			get

			{

				return this.GetTable<Employees>();

			}

		}

	}

	

	[Table(Name="dbo.Employees")]

	public partial class Employees : INotifyPropertyChanging, INotifyPropertyChanged

	{

		

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

		

		private int _EmployeeID;

		

		private string _LastName;

		

		private string _FirstName;

		

		private string _Title;

		

		private string _TitleOfCourtesy;

		

		private System.Nullable<System.DateTime> _BirthDate;

		

		private System.Nullable<System.DateTime> _HireDate;

		

		private string _Address;

		

		private string _City;

		

		private string _Region;

		

		private string _PostalCode;

		

		private string _Country;

		

		private string _HomePhone;

		

		private string _Extension;

		

		private System.Data.Linq.Binary _Photo;

		

		private string _Notes;

		

		private System.Nullable<int> _ReportsTo;

		

		private string _PhotoPath;

		

		private EntitySet<Employees> _Employees2;

		

		private EntityRef<Employees> _Employees1;

		

    #region Extensibility Method Definitions

    partial void OnLoaded();

    partial void OnValidate(System.Data.Linq.ChangeAction action);

    partial void OnCreated();

    partial void OnEmployeeIDChanging(int value);

    partial void OnEmployeeIDChanged();

    partial void OnLastNameChanging(string value);

    partial void OnLastNameChanged();

    partial void OnFirstNameChanging(string value);

    partial void OnFirstNameChanged();

    partial void OnTitleChanging(string value);

    partial void OnTitleChanged();

    partial void OnTitleOfCourtesyChanging(string value);

    partial void OnTitleOfCourtesyChanged();

    partial void OnBirthDateChanging(System.Nullable<System.DateTime> value);

    partial void OnBirthDateChanged();

    partial void OnHireDateChanging(System.Nullable<System.DateTime> value);

    partial void OnHireDateChanged();

    partial void OnAddressChanging(string value);

    partial void OnAddressChanged();

    partial void OnCityChanging(string value);

    partial void OnCityChanged();

    partial void OnRegionChanging(string value);

    partial void OnRegionChanged();

    partial void OnPostalCodeChanging(string value);

    partial void OnPostalCodeChanged();

    partial void OnCountryChanging(string value);

    partial void OnCountryChanged();

    partial void OnHomePhoneChanging(string value);

    partial void OnHomePhoneChanged();

    partial void OnExtensionChanging(string value);

    partial void OnExtensionChanged();

    partial void OnPhotoChanging(System.Data.Linq.Binary value);

    partial void OnPhotoChanged();

    partial void OnNotesChanging(string value);

    partial void OnNotesChanged();

    partial void OnReportsToChanging(System.Nullable<int> value);

    partial void OnReportsToChanged();

    partial void OnPhotoPathChanging(string value);

    partial void OnPhotoPathChanged();

    #endregion

		

		public Employees()

		{

			this._Employees2 = new EntitySet<Employees>(new Action<Employees>(this.attach_Employees2), new Action<Employees>(this.detach_Employees2));

			this._Employees1 = default(EntityRef<Employees>);

			OnCreated();

		}

		

		[Column(Storage="_EmployeeID", AutoSync=AutoSync.OnInsert, DbType="Int NOT NULL IDENTITY", IsPrimaryKey=true, IsDbGenerated=true)]

		public int EmployeeID

		{

			get

			{

				return this._EmployeeID;

			}

			set

			{

				if ((this._EmployeeID != value))

				{

					this.OnEmployeeIDChanging(value);

					this.SendPropertyChanging();

					this._EmployeeID = value;

					this.SendPropertyChanged("EmployeeID");

					this.OnEmployeeIDChanged();

				}

			}

		}

		

		[Column(Storage="_LastName", DbType="NVarChar(20) NOT NULL", CanBeNull=false)]

		public string LastName

		{

			get

			{

				return this._LastName;

			}

			set

			{

				if ((this._LastName != value))

				{

					this.OnLastNameChanging(value);

					this.SendPropertyChanging();

					this._LastName = value;

					this.SendPropertyChanged("LastName");

					this.OnLastNameChanged();

				}

			}

		}

		

		[Column(Storage="_FirstName", DbType="NVarChar(10) NOT NULL", CanBeNull=false)]

		public string FirstName

		{

			get

			{

				return this._FirstName;

			}

			set

			{

				if ((this._FirstName != value))

				{

					this.OnFirstNameChanging(value);

					this.SendPropertyChanging();

					this._FirstName = value;

					this.SendPropertyChanged("FirstName");

					this.OnFirstNameChanged();

				}

			}

		}

		

		[Column(Storage="_Title", DbType="NVarChar(30)")]

		public string Title

		{

			get

			{

				return this._Title;

			}

			set

			{

				if ((this._Title != value))

				{

					this.OnTitleChanging(value);

					this.SendPropertyChanging();

					this._Title = value;

					this.SendPropertyChanged("Title");

					this.OnTitleChanged();

				}

			}

		}

		

		[Column(Storage="_TitleOfCourtesy", DbType="NVarChar(25)")]

		public string TitleOfCourtesy

		{

			get

			{

				return this._TitleOfCourtesy;

			}

			set

			{

				if ((this._TitleOfCourtesy != value))

				{

					this.OnTitleOfCourtesyChanging(value);

					this.SendPropertyChanging();

					this._TitleOfCourtesy = value;

					this.SendPropertyChanged("TitleOfCourtesy");

					this.OnTitleOfCourtesyChanged();

				}

			}

		}

		

		[Column(Storage="_BirthDate", DbType="DateTime")]

		public System.Nullable<System.DateTime> BirthDate

		{

			get

			{

				return this._BirthDate;

			}

			set

			{

				if ((this._BirthDate != value))

				{

					this.OnBirthDateChanging(value);

					this.SendPropertyChanging();

					this._BirthDate = value;

					this.SendPropertyChanged("BirthDate");

					this.OnBirthDateChanged();

				}

			}

		}

		

		[Column(Storage="_HireDate", DbType="DateTime")]

		public System.Nullable<System.DateTime> HireDate

		{

			get

			{

				return this._HireDate;

			}

			set

			{

				if ((this._HireDate != value))

				{

					this.OnHireDateChanging(value);

					this.SendPropertyChanging();

					this._HireDate = value;

					this.SendPropertyChanged("HireDate");

					this.OnHireDateChanged();

				}

			}

		}

		

		[Column(Storage="_Address", DbType="NVarChar(60)")]

		public string Address

		{

			get

			{

				return this._Address;

			}

			set

			{

				if ((this._Address != value))

				{

					this.OnAddressChanging(value);

					this.SendPropertyChanging();

					this._Address = value;

					this.SendPropertyChanged("Address");

					this.OnAddressChanged();

				}

			}

		}

		

		[Column(Storage="_City", DbType="NVarChar(15)")]

		public string City

		{

			get

			{

				return this._City;

			}

			set

			{

				if ((this._City != value))

				{

					this.OnCityChanging(value);

					this.SendPropertyChanging();

					this._City = value;

					this.SendPropertyChanged("City");

					this.OnCityChanged();

				}

			}

		}

		

		[Column(Storage="_Region", DbType="NVarChar(15)")]

		public string Region

		{

			get

			{

				return this._Region;

			}

			set

			{

				if ((this._Region != value))

				{

					this.OnRegionChanging(value);

					this.SendPropertyChanging();

					this._Region = value;

					this.SendPropertyChanged("Region");

					this.OnRegionChanged();

				}

			}

		}

		

		[Column(Storage="_PostalCode", DbType="NVarChar(10)")]

		public string PostalCode

		{

			get

			{

				return this._PostalCode;

			}

			set

			{

				if ((this._PostalCode != value))

				{

					this.OnPostalCodeChanging(value);

					this.SendPropertyChanging();

					this._PostalCode = value;

					this.SendPropertyChanged("PostalCode");

					this.OnPostalCodeChanged();

				}

			}

		}

		

		[Column(Storage="_Country", DbType="NVarChar(15)")]

		public string Country

		{

			get

			{

				return this._Country;

			}

			set

			{

				if ((this._Country != value))

				{

					this.OnCountryChanging(value);

					this.SendPropertyChanging();

					this._Country = value;

					this.SendPropertyChanged("Country");

					this.OnCountryChanged();

				}

			}

		}

		

		[Column(Storage="_HomePhone", DbType="NVarChar(24)")]

		public string HomePhone

		{

			get

			{

				return this._HomePhone;

			}

			set

			{

				if ((this._HomePhone != value))

				{

					this.OnHomePhoneChanging(value);

					this.SendPropertyChanging();

					this._HomePhone = value;

					this.SendPropertyChanged("HomePhone");

					this.OnHomePhoneChanged();

				}

			}

		}

		

		[Column(Storage="_Extension", DbType="NVarChar(4)")]

		public string Extension

		{

			get

			{

				return this._Extension;

			}

			set

			{

				if ((this._Extension != value))

				{

					this.OnExtensionChanging(value);

					this.SendPropertyChanging();

					this._Extension = value;

					this.SendPropertyChanged("Extension");

					this.OnExtensionChanged();

				}

			}

		}

		

		[Column(Storage="_Photo", DbType="Image", UpdateCheck=UpdateCheck.Never)]

		public System.Data.Linq.Binary Photo

		{

			get

			{

				return this._Photo;

			}

			set

			{

				if ((this._Photo != value))

				{

					this.OnPhotoChanging(value);

					this.SendPropertyChanging();

					this._Photo = value;

					this.SendPropertyChanged("Photo");

					this.OnPhotoChanged();

				}

			}

		}

		

		[Column(Storage="_Notes", DbType="NText", UpdateCheck=UpdateCheck.Never)]

		public string Notes

		{

			get

			{

				return this._Notes;

			}

			set

			{

				if ((this._Notes != value))

				{

					this.OnNotesChanging(value);

					this.SendPropertyChanging();

					this._Notes = value;

					this.SendPropertyChanged("Notes");

					this.OnNotesChanged();

				}

			}

		}

		

		[Column(Storage="_ReportsTo", DbType="Int")]

		public System.Nullable<int> ReportsTo

		{

			get

			{

				return this._ReportsTo;

			}

			set

			{

				if ((this._ReportsTo != value))

				{

					if (this._Employees1.HasLoadedOrAssignedValue)

					{

						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();

					}

					this.OnReportsToChanging(value);

					this.SendPropertyChanging();

					this._ReportsTo = value;

					this.SendPropertyChanged("ReportsTo");

					this.OnReportsToChanged();

				}

			}

		}

		

		[Column(Storage="_PhotoPath", DbType="NVarChar(255)")]

		public string PhotoPath

		{

			get

			{

				return this._PhotoPath;

			}

			set

			{

				if ((this._PhotoPath != value))

				{

					this.OnPhotoPathChanging(value);

					this.SendPropertyChanging();

					this._PhotoPath = value;

					this.SendPropertyChanged("PhotoPath");

					this.OnPhotoPathChanged();

				}

			}

		}

		

		[Association(Name="Employees_Employees", Storage="_Employees2", ThisKey="EmployeeID", OtherKey="ReportsTo")]

		public EntitySet<Employees> Employees2

		{

			get

			{

				return this._Employees2;

			}

			set

			{

				this._Employees2.Assign(value);

			}

		}

		

		[Association(Name="Employees_Employees", Storage="_Employees1", ThisKey="ReportsTo", OtherKey="EmployeeID", IsForeignKey=true)]

		public Employees Employees1

		{

			get

			{

				return this._Employees1.Entity;

			}

			set

			{

				Employees previousValue = this._Employees1.Entity;

				if (((previousValue != value) 

							|| (this._Employees1.HasLoadedOrAssignedValue == false)))

				{

					this.SendPropertyChanging();

					if ((previousValue != null))

					{

						this._Employees1.Entity = null;

						previousValue.Employees2.Remove(this);

					}

					this._Employees1.Entity = value;

					if ((value != null))

					{

						value.Employees2.Add(this);

						this._ReportsTo = value.EmployeeID;

					}

					else

					{

						this._ReportsTo = default(Nullable<int>);

					}

					this.SendPropertyChanged("Employees1");

				}

			}

		}

		

		public event PropertyChangingEventHandler PropertyChanging;

		

		public event PropertyChangedEventHandler PropertyChanged;

		

		protected virtual void SendPropertyChanging()

		{

			if ((this.PropertyChanging != null))

			{

				this.PropertyChanging(this, emptyChangingEventArgs);

			}

		}

		

		protected virtual void SendPropertyChanged(String propertyName)

		{

			if ((this.PropertyChanged != null))

			{

				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));

			}

		}

		

		private void attach_Employees2(Employees entity)

		{

			this.SendPropertyChanging();

			entity.Employees1 = this;

		}

		

		private void detach_Employees2(Employees entity)

		{

			this.SendPropertyChanging();

			entity.Employees1 = null;

		}

	}

}

#pragma warning restore 1591

Open in new window

0

Featured Post

Highfive + Dolby Voice = No More Audio Complaints!

Poor audio quality is one of the top reasons people don’t use video conferencing. Get the crispest, clearest audio powered by Dolby Voice in every meeting. Highfive and Dolby Voice deliver the best video conferencing and audio experience for every meeting and every room.

Join & Write a Comment

IP addresses can be stored in a database in any of several ways.  These ways may vary based on the volume of the data.  I was dealing with quite a large amount of data for user authentication purpose, and needed a way to minimize the storage.   …
A long time ago (May 2011), I have written an article showing you how to create a DLL using Visual Studio 2005 to be hosted in SQL Server 2005. That was valid at that time and it is still valid if you are still using these versions. You can still re…
Internet Business Fax to Email Made Easy - With eFax Corporate (http://www.enterprise.efax.com), you'll receive a dedicated online fax number, which is used the same way as a typical analog fax number. You'll receive secure faxes in your email, fr…
This video explains how to create simple products associated to Magento configurable product and offers fast way of their generation with Store Manager for Magento tool.

747 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

12 Experts available now in Live!

Get 1:1 Help Now