Обычно я вручную перевожу свои собственные точки данных и объекты данных для Linq в Sql.Я создам образец datacontext, объекта table и метода получения, чтобы показать мою маленькую домашнюю стратегию.Мы скажем, что моя база данных называется «Main», мой табличный объект будет «dbo.Person» внутри sql.
здесь идет:
DataContext, представляющий мои данные:
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;
}
}
}
Несколько вещей, на которые следует обратить внимание: я объявляю источник статического сопоставления в текстовом тексте данных для передачи в базовый контекст данных, исключительно для сохранения состояния при выполнении предварительно скомпилированных запросов linq.В этом нет необходимости, есть базовый конструктор, который просто принимает строку подключения.
Кроме того, при объявлении Dtos убедитесь, что имя открытого свойства ТОЧНО совпадает с именем вашей таблицы в базе данных.Ваш личный член может быть назван как угодно.
Надеюсь, это поможет!