나는 일반적으로 손을 내 자신의 datacontexts 및 데이터 개체뿐만 아니라 Sql Linq에 대한 롤. 내 작은 집에서 만든 전략을 보여주기 위해 샘플 datacontext, table 객체 및 리트리버 메서드를 만들겠습니다. 우리는 데이터베이스 이름이 "Main"이라고 말하고, 테이블 객체는 SQL 내부에 "dbo.Person"이 될 것입니다.
은 간다 : 이제 마지막으로 PersonRetriever 클래스
[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; }
}
}
:
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;
}
}
}
A ~ F를
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 내 테이블을 나타내는 :
DataContext를 내 databae를 나타내는 주의 사항 : 미리 컴파일 된 linq 쿼리를 수행 할 때 상태를 유지하기 위해서만 기본 데이터 컨텍스트에 전달하기 위해 datacontext에 정적 매핑 소스를 선언합니다. 필요하지 않습니다. 연결 문자열을받는 기본 생성자가 있습니다.
또한 Dtos를 선언 할 때 공용 속성 이름이 정확히 데이터베이스의 테이블과 일치하는지 확인하십시오. 비공개 멤버의 이름은 원하는대로 지정할 수 있습니다.
희망이 도움이됩니다.
'데이터 클래스에 기능 (확장) 추가'란 무엇을 의미합니까? 어떤 기능을 생각하고 있습니까? – Steven
나는 (테이블에서 생성 된) 객체 클래스에 대한 비즈니스 로직을 의미한다. –
또한 - VS2008SP1을 사용하는 경우 "MyDataContext.cs를 추가 할 때 생성 된 코드가 기화 됨"이라는 경고 (VS2010에서 수정 됨)를주의하십시오. 이것에 의해 타격을 받으면 해결 방법이 있습니다. –