생성자 메소드를 사용하여 LINQ 엔티티 클래스를 확장하고 해당 엔티티 클래스가 데이터 콘텐츠 클래스에서 상속받습니다.
-
03-07-2019 - |
문제
Linq-to-SQL Entity 클래스를 생성자 방법과 같은 이동으로 확장 할 수 있습니까? 엔티티 클래스가 데이터 컨텍스트 클래스에서 상속되게 만드십시오. 본질적으로 엔티티 클래스를 비즈니스 객체로 변환하십시오.
이것은 내가 현재 사용하고있는 패턴입니다.
namespace Xxx
{
public class User : Xxx.DataContext
{
public enum SiteAccessRights
{
NotRegistered = 0,
Registered = 1,
Administrator = 3
}
private Xxx.Entities.User _user;
public Int32 ID
{
get
{
return this._user.UsersID;
}
}
public Xxx.User.SiteAccessRights AccessRights
{
get
{
return (Xxx.User.SiteAccessRights)this._user.UsersAccessRights;
}
set
{
this._user.UsersAccessRights = (Int32)value;
}
}
public String Alias
{
get
{
return this._user.UsersAlias;
}
set
{
this._user.UsersAlias = value;
}
}
public User(Int32 userID)
{
var user = (from u in base.Users
where u.UsersID == userID
select u).FirstOrDefault();
if (user != null)
{
this._user = user;
}
else
{
this._user = new Xxx.Entities.User();
base.Users.InsertOnSubmit(this._user);
}
}
public User(Xxx.User.SiteAccessRights accessRights, String alias)
{
var user = (from u in base.Users
where u.UsersAccessRights == (Int32)accessRights && u.UsersAlias == alias
select u).FirstOrDefault();
if (user != null)
{
this._user = user;
}
else
{
this._user = new Xxx.Entities.User
{
UsersAccessRights = (Int32)accessRights,
UsersAlias = alias
};
base.Users.InsertOnSubmit(this._user);
}
}
public void DeleteOnSubmit()
{
base.Users.DeleteOnSubmit(this._user);
}
}
}
업데이트:
제물에 두 개의 생성자 방법이 있습니다 User
수업. 나는 그것들을 User
엔티티 클래스 그리고 연장 User
데이터 컨텍스트 클래스의 엔티티 클래스는 "New-Up"의 엔티티 클래스에서 데이터 컨텍스트를 사용할 수 있도록합니다.
이것이 말이되기를 바랍니다.
해결책
엔티티를 데이터 콘텍스트 유형으로 만드는 것은 의미가없는 것 같습니다. 비즈니스 객체로 간주되기 위해 Datacontext 일 필요는 없으며 원래 엔터티를 포함하는 유형을 만들 필요가 없습니다. 엔티티 클래스를 확장하고 구성을 사용하여 데이터 콘텍스트에 대한 참조를 포함하는 것이 좋습니다.
namespace Xxx.Entities
{
public partial class User : IDisposable
{ DataContext ctx;
public static GetUserByID(int userID)
{ var ctx = new DataContext();
var user = ctx.Users.FirstOrDefault(u=>u.UsersID == userID);
if (user == null)
{
user = new User();
ctx.Users.InsertOnSubmit(user);
}
user.ctx = ctx;
return user;
}
public void Dispose() { if (ctx != null) ctx.Dispose(); }
}
}
속성 이름이 데이터베이스 열 이름과 다르기를 원한다면 매핑 파일에서이를 수행하십시오.
다른 팁
Rick Strahl에는 내가 찾고 있다고 생각하는 것을 다루는 정말 좋은 기사가 많이 있습니다. 그의 목록을 확인하십시오 여기 LINQ 기사
데이터 컨텍스트에서 엔티티를 상속하는 것은 나쁜 생각입니다. 그것들은 두 개의 불연속 객체이며 그런 식으로 작동하도록 설계되었습니다. 이렇게하면 관련 변경 사항을 동시에 함께 제출하려고 시도하는 데있어 모든 문제가 최소한 모든 문제를 일으킬 수 있습니다. 여러 데이터 컨텍스트를 통해 독립적으로 작업 할 때마다 실패하게됩니다.