当前位置:编程学习 > C#/ASP.NET >>

linq to sql 中如何重写尸体类的INSERT方法?



m_DataContext.Departments.InsertOnSubmit(depEntiy);
m_DataContext.SubmitChanges();

如何重写Departments下的INSERT方法呢? --------------------编程问答-------------------- 实体  低调 --------------------编程问答-------------------- 为什么要重写??
想要达到什么样的效果??
--------------------编程问答-------------------- 我在类里面增加了一个属性,新增的时候报错。 --------------------编程问答-------------------- linq已封装好 了insert方法

你要重写是为了什么?

返回新增的ID?

 return depEntiy.ID 就可以 --------------------编程问答--------------------
引用 3 楼 linux_ch 的回复:
我在类里面增加了一个属性,新增的时候报错。


重新映射dbml文件 --------------------编程问答-------------------- 新增的属性就是想返回JION的结果方便处理。

 [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_UserName", DbType = "NVarChar(40) NOT NULL", CanBeNull = true, UpdateCheck = UpdateCheck.Never)]
        public string UserName
        {
            get
            {
                return _UserName;
            }
            set
            {
                _UserName = value;
            }

问题就在于怎么才能就是在新增的时候让linq识别这个不是数据库的字段呢? --------------------编程问答--------------------
引用 4 楼 q107770540 的回复:
linq已封装好 了insert方法

你要重写是为了什么?

返回新增的ID?

 return depEntiy.ID 就可以

不懂? --------------------编程问答--------------------
引用 7 楼 linux_ch 的回复:
引用 4 楼 q107770540 的回复:
linq已封装好 了insert方法

你要重写是为了什么?

返回新增的ID?

return depEntiy.ID 就可以

不懂?

你的代表 已经
m_DataContext.SubmitChanges();
实体内信息已更新 --------------------编程问答--------------------
引用 8 楼 q107770540 的回复:
引用 7 楼 linux_ch 的回复:

引用 4 楼 q107770540 的回复:
linq已封装好 了insert方法

你要重写是为了什么?

返回新增的ID?

return depEntiy.ID 就可以

不懂?

你的代表 已经
m_DataContext.SubmitChanges();
实体内信息已更新

没你还没明白我的意思

   public List<Department> Query(Department depEntiy)
        {

            var deptCollect = from dept in this.GetDepartments()
                              join user in this.m_DataContext.Users on dept.ManagerID equals (int?)user.UserID into tmp
                              from subDept in tmp.DefaultIfEmpty()
                              where subDept.Department.DepartmentName.Contains(depEntiy.DepartmentName)
                              orderby subDept.Department.DepartmentID
                              select new { UserName = subDept.UserName, subDept.Department.CreatedBy, subDept.Department.LastUpdatedBy, subDept.Department.DepartmentDescription, subDept.Department.DepartmentName,dept.DepartmentID };

            //return deptCollect;
            using (m_DataContext.Connection)
            {
                return m_DataContext.ExecuteQuery<Department>(deptCollect);
            }
        }


我是通过增加一个属性来让返回需要的字段,并不是返回所有的字段,但是在更新的时候就报错,试着取消新增加的字段UserName的属性(数据库对应的属性),是可以新增了,但是查询出来的是NULL --------------------编程问答--------------------
引用 9 楼 linux_ch 的回复:
我是通过增加一个属性来让返回需要的字段,并不是返回所有的字段,但是在更新的时候就报错,试着取消新增加的字段UserName的属性(数据库对应的属性),是可以新增了,但是查询出来的是NULL

很难说懂了你的意思。。。。
你到底是要给谁增加一个属性???
如果是给实体表增加属性(字段),
那又跟insert方法又什么关系???
跟重载有什么关系????? --------------------编程问答-------------------- 感觉很多人根本就不懂什么是linq,
就混乱使用。。。。 --------------------编程问答--------------------
引用 10 楼 foren_whb 的回复:
引用 9 楼 linux_ch 的回复:
我是通过增加一个属性来让返回需要的字段,并不是返回所有的字段,但是在更新的时候就报错,试着取消新增加的字段UserName的属性(数据库对应的属性),是可以新增了,但是查询出来的是NULL

很难说懂了你的意思。。。。
你到底是要给谁增加一个属性???
如果是给实体表增加属性(字段),
那又跟insert方法又什么关系???
跟重载有什么关系……

增加了字段后需要和表里面的字段进行关影射,例如 a表:id name idType b表 idType TypeName 
a join b后我想返回selece new {a.id,a.name.a.TypeName}
我新增加了属性
 private string _TypeName;
       // partial void InsertDepartment(Department instance);

        [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_TypeName", DbType = "NVarChar(40) NOT NULL", CanBeNull = true, UpdateCheck = UpdateCheck.Never,AutoSync = AutoSync.Never)]
        public string TypeName
        {
            get
            {
                return _TypeName;
            }
            set
            {
                _TypeName= value;
            }
        }
查询是可以看到TypeName的,但是新增的时候就是由于新增了这个属性的结果报错? --------------------编程问答--------------------
引用 11 楼 foren_whb 的回复:
感觉很多人根本就不懂什么是linq,
就混乱使用。。。。

新人~~~ --------------------编程问答--------------------

//这样就可以得到你要查询的结果,不需要改动linq原始映射!!
var re = dc.a.Select(p=>new {p.id,
                             p.name,
                             p.b.typeName
                            }
                     );

你往一个表里根本就没有的字段里insert数据,当然会报错! --------------------编程问答--------------------
引用 14 楼 foren_whb 的回复:
C# code

//这样就可以得到你要查询的结果,不需要改动linq原始映射!!
var re = dc.a.Select(p=>new {p.id,
                             p.name,
                             p.b.typeName
                            }
       ……

对啊,所以我想重写这个INSERT方法哈 --------------------编程问答-------------------- 你还是没明白我的意思 --------------------编程问答-------------------- 那也不需要重写insert方法,你只要写个专用的insert方法,把数据传进去,在该方法里面进行insert操作就可以了 --------------------编程问答--------------------                            貌似现在好多不是技术问题,     而是沟通问题,  --------------------编程问答-------------------- 算了,肯定不应该改linq的映射关系,给你全套解决方案:
//1〉添加一个数据类:
public class newA
{
    id ...
    name ...
    TypeName...
    ....
}

//2>取数据:
IQueryable<newA> re = dc.a.Select(p=>new newA {id       = p.id,
                                               name     = p.name,
                                               typeName = p.b.typeName
                                              }
                                  );
//3>插入数据:
public void myInsert(newA na)
{
   A a = new A();//new一个A对象
   a.id = na.id;
   a.name = na.name;
   a.idType = "xxxx";//这里根据业务需要自己给值

   B b = new B();//new一个B对象
   b.idType  = a.idType;
   b.typeName = a.typeName;

   a.b.Add(b);//往a对象里面添加b对象
   
    dc.a.InsertOnSubmit(a);//往数据库里面插入a,同时会自动插入b
 }
--------------------编程问答-------------------- b.typeName = a.typeName;

==〉〉

b.typeName = na.typeName;
--------------------编程问答-------------------- LZ急了.微软哭了。我被雷了.. --------------------编程问答-------------------- 尸体类。。。
补充:.NET技术 ,  LINQ
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,