使用构造函数方法扩展LINQ实体类,并使该实体类从其DataContext类继承

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

  •  03-07-2019
  •  | 
  •  

是否可以使用构造函数方法扩展LINQ-to-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 entity-class 在它的数据上下文类上扩展 User 实体类,以便数据上下文可用于“new-up”实体类。

希望这是有道理的。

有帮助吗?

解决方案

将实体作为一种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(); }
   }
}

如果您只想让属性名称与数据库列名称不同,请在映射文件中执行此操作。

其他提示

Rick Strahl有很多非常好的文章可以解决我认为你正在寻找的问题。查看他的 Linq Articles Here 列表

从数据上下文继承实体是个坏主意。它们是两个独立的对象,旨在以这种方式运行。这样做会导致各种问题,尤其是在尝试同时提交大量相关更改时会出现这些问题 - 通过多个数据上下文会导致每个尝试独立工作时失败。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top