Erweitern einer LINQ Entity-Klasse mit Konstruktormethoden und machen diese Entity-Klasse vererben es Datacontext-Klasse ist

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

  •  03-07-2019
  •  | 
  •  

Frage

Ist es möglich, LINQ to SQL Entity-Klassen mit Konstruktor-Methoden und in der gleichen gehen zu verlängern; machen, dass die Entity-Klasse vererben es Datenkontextklasse ist -?. Im Wesentlichen Umwandlung der Entity-Klasse in ein Geschäftsobjekt

Dies ist das Muster, das ich bin derzeit mit:

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:

Beachten Sie, dass ich in meiner User Klasse zwei Konstruktor-Methoden. Ich möchte diejenigen, die User Entity-Klasse übertragen und die User Entity-Klasse erweitert auf sie Datenkontextklasse ist, so dass der Daten-Kontext auf die Entität-Klasse auf „neu zur Verfügung steht -up“.

Hoffe, dass dies Sinn macht.

War es hilfreich?

Lösung

Es scheint nicht sinnvoll, ein Unternehmen eine Art von Datacontext zu machen. Es braucht keinen Datacontext sein, um ein Business-Objekt zu betrachten, noch brauchen Sie unbedingt eine Art zu schaffen, die die ursprüngliche Einheit enthält. Es könnte besser sein, nur die Einheit Klasse zu erweitern und einen Verweis auf eine Datacontext mit Zusammensetzung enthalten:

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

Wenn Sie nur die Eigenschaftsnamen wollen die Datenbank Spaltennamen, anders zu sein als, tut das in der Zuordnungsdatei.

Andere Tipps

Rick Strahl hat eine Reihe von wirklich guten Artikel, die Adresse, was ich denke, Sie suchen. Schauen Sie sich seine Liste der Linq Artikel hier

Vererben eine Einheit aus einem Datenkontext ist eine schlechte Idee. Sie sind zwei getrennte Objekte und sind entworfen, um auf diese Weise zu betreiben. Dadurch wird alle möglichen Fragen allerwenigsten Probleme verursacht mit dem Versuch, eine Reihe von damit verbundenen Veränderungen zusammen zugleich vorlegen -. mehr Daten Kontexte durchlaufen führt dies zum Scheitern verurteilt, da jeder, unabhängig zu arbeiten versucht

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top