Я обычно рулон собственных данных и объектов данных, а также для Linq to Sql. Я создам образец объекта datacontext, table object и retriever, чтобы показать мою небольшую домашнюю стратегию. Мы скажем, что имя моей базы данных «Main», мой объект таблицы будет «dbo.Person» внутри sql.
здесь идет:
DataContext, представляющий мою databae:
internal class MainDataContext : System.Data.Linq.DataContext
{
private static MappingSource _mappingSource = new AttributeMappingSource();
internal MainDataContext(string connectionString)
: base(connectionString, _mappingSource) {}
internal Table<PersonDto> PersonDtos { get { return GetTable<PersonDto>(); } }
}
Dto, представляющий мою таблицу:
[Table(Name = "dbo.Person")]
internal class PersonDto
{
private Guid _id;
[Column(Storage = "_id", IsPrimaryKey = true)]
public Guid Id
{
get { return _id; }
set { _id = value; }
}
private string _name;
[Column(Storage = "_name")]
public string Name
{
get { return _name; }
set { _name = value; }
}
private DateTime _dateCreated;
[Column(Storage = "_dateCreated")]
public DateTime DateCreated
{
get { return _dateCreated; }
set { _dateCreated = value; }
}
}
Теперь, наконец, PersonRetriever класс:
public class PersonRepository
{
private string _connectionString;
public PersonRepository(string connectionString)
{
_connectionString = connectionString;
}
string GetPersonName(Guid personId)
{
using (var db = new MainDataContext(_connectionString))
{
string personName = string.Empty;
PersonDto person = db.PersonDtos.FirstOrDefault(c => c.Id == personId);
if (person != null)
{
personName = person.Name;
}
return personName;
}
}
}
А П Что нужно отметить: я объявляю статический источник сопоставления в datacontext для перехода к базовому контексту данных, исключительно для сохранения состояния при выполнении предварительно скомпилированных запросов linq. Это необязательно, есть базовый конструктор, который просто берет строку подключения.
Кроме того, убедитесь, что при объявлении вашего Dtos имя открытого свойства соответствует ТОЧНО, какова ваша таблица в базе данных. ваш частный член может быть назван как угодно.
Надеюсь, это поможет!
Что вы подразумеваете под словом 'add function (extend) к классу данных'. О какой функциональности вы думаете? – Steven
Я имею в виду бизнес-логику для класса объекта (созданного из таблицы). –
Также - при использовании VS2008SP1 следите за тем, «мой сгенерированный код испарился при добавлении ошибки MyDataContext.cs» (исправлено в VS2010). Если вы попадаете под это, есть обходной путь. –