Estender um LINQ entidade de classe com métodos construtores e fazer que herdam entidade de classe da sua classe DataContext

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

  •  03-07-2019
  •  | 
  •  

Pergunta

É possível estender LINQ to SQL entidade classes com construtor-métodos e no mesmo movimento; fazer que herdam entidade de classe da sua classe ao contexto de dados -?. Em essência convertendo a entidade de classe em um objeto de negócios

Este é o padrão que eu estou usando atualmente:

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);
        }
    }
}

Update:

Observe que eu tenho duas construtor-métodos da minha classe User. Eu gostaria de transferir aqueles ao User entidade de classe e estender a User entidade de classe em sua classe ao contexto de dados, para que os dados ao contexto está disponível para a entidade de classe em "nova -up".

Espero que isso faz sentido.

Foi útil?

Solução

Não parece fazer sentido para fazer uma entidade um tipo de DataContext. Ele não precisa ser um DataContext, a fim de ser considerado um objeto de negócios, nem você precisa necessariamente criar um tipo que contém a entidade originais. Poderia ser melhor apenas para estender a classe entidade e incluir uma referência a um usando composição 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(); }
   }
}

Se você quiser apenas os nomes de propriedade de ser diferente do que os nomes das colunas de banco de dados, fazer isso no arquivo de mapeamento.

Outras dicas

Rick Strahl tem um número de realmente bons artigos que endereço o que eu acho que você está procurando. Confira o seu lista de Linq artigos aqui

Herdando uma entidade a partir de um contexto de dados é uma má idéia. Eles são dois objetos distintos e são projetados para operar dessa maneira. Fazendo isso irá causar todos os tipos de questões menos de todos os problemas com a tentativa de enviar um monte de mudanças relacionados juntos ao mesmo tempo -. Passando por múltiplos contextos de dados fará com que isso falhar como cada um tenta trabalhar de forma independente

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top