تمديد LINQ الكيان الدرجة مع منشئ أساليب وجعل هذا الكيان الدرجة ترث من DataContext الدرجة

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

  •  03-07-2019
  •  | 
  •  

سؤال

هل من الممكن تمديد LINQ إلى SQL الكيان الطبقات مع البناء-الطرق و في نفس ؛ جعل هذا الكيان الدرجة ترث من البيانات سياق الصف ؟ --في جوهرها تحويل الكيان الدرجة في الأعمال التجارية الكائن.

هذا هو النمط الذي أنا حاليا باستخدام:

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 الكيان الدرجة على البيانات فئة السياق ، حيث أن البيانات السياق هو متاح الكيان الدرجة على "الجديدة المتابعة".

نأمل أن يكون هذا منطقي.

هل كانت مفيدة؟

المحلول

فإنه لا يبدو من المنطقي أن تجعل كيان نوع من DataContext.فإنه لا حاجة إلى أن يكون DataContext لكي يعتبر عمل وجوه ولا تحتاج بالضرورة إلى خلق نوع يحتوي على الكيان الأصلي.قد يكون من الأفضل أن مجرد تمديد الكيان فئة تحتوي على مرجع إلى 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(); }
   }
}

إذا كنت ترغب فقط في الممتلكات أسماء مختلفة من قاعدة البيانات أسماء الأعمدة في ملف التعيين.

نصائح أخرى

ريك Strahl يحتوي على عدد من المقالات الجيدة التي تعالج ما أعتقد كنت تبحث عن.تحقق من قائمة Linq المقالات هنا

وراثة كيان من البيانات السياق هو فكرة سيئة.هم اثنين كائنات منفصلة و هي مصممة للعمل بهذه الطريقة.هذا النوع من القضايا على الأقل من كل المشاكل مع محاولة تقديم مجموعة من التغيرات المرتبطة معا في نفس الوقت - الذهاب من خلال بيانات متعددة السياقات سوف يؤدي هذا إلى فشل كل يحاول العمل بشكل مستقل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top