생성자 메소드를 사용하여 LINQ 엔티티 클래스를 확장하고 해당 엔티티 클래스가 데이터 콘텐츠 클래스에서 상속받습니다.

StackOverflow https://stackoverflow.com/questions/222897

  •  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 기사

데이터 컨텍스트에서 엔티티를 상속하는 것은 나쁜 생각입니다. 그것들은 두 개의 불연속 객체이며 그런 식으로 작동하도록 설계되었습니다. 이렇게하면 관련 변경 사항을 동시에 함께 제출하려고 시도하는 데있어 모든 문제가 최소한 모든 문제를 일으킬 수 있습니다. 여러 데이터 컨텍스트를 통해 독립적으로 작업 할 때마다 실패하게됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top