linq to sql 中如何重写尸体类的INSERT方法?
m_DataContext.Departments.InsertOnSubmit(depEntiy);
m_DataContext.SubmitChanges();
如何重写Departments下的INSERT方法呢? --------------------编程问答-------------------- 实体 低调 --------------------编程问答-------------------- 为什么要重写??
想要达到什么样的效果??
--------------------编程问答-------------------- 我在类里面增加了一个属性,新增的时候报错。 --------------------编程问答-------------------- linq已封装好 了insert方法
你要重写是为了什么?
返回新增的ID?
return depEntiy.ID 就可以 --------------------编程问答--------------------
重新映射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识别这个不是数据库的字段呢? --------------------编程问答--------------------
不懂? --------------------编程问答--------------------
你的代表 已经
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 --------------------编程问答--------------------
很难说懂了你的意思。。。。
你到底是要给谁增加一个属性???
如果是给实体表增加属性(字段),
那又跟insert方法又什么关系???
跟重载有什么关系????? --------------------编程问答-------------------- 感觉很多人根本就不懂什么是linq,
就混乱使用。。。。 --------------------编程问答--------------------
增加了字段后需要和表里面的字段进行关影射,例如 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的,但是新增的时候就是由于新增了这个属性的结果报错? --------------------编程问答--------------------
新人~~~ --------------------编程问答--------------------
//这样就可以得到你要查询的结果,不需要改动linq原始映射!!
var re = dc.a.Select(p=>new {p.id,
p.name,
p.b.typeName
}
);
你往一个表里根本就没有的字段里insert数据,当然会报错! --------------------编程问答--------------------
对啊,所以我想重写这个INSERT方法哈 --------------------编程问答-------------------- 你还是没明白我的意思 --------------------编程问答-------------------- 那也不需要重写insert方法,你只要写个专用的insert方法,把数据传进去,在该方法里面进行insert操作就可以了 --------------------编程问答-------------------- 貌似现在好多不是技术问题, 而是沟通问题, --------------------编程问答-------------------- 算了,肯定不应该改linq的映射关系,给你全套解决方案:
//1〉添加一个数据类:--------------------编程问答-------------------- b.typeName = a.typeName;
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 = na.typeName;
--------------------编程问答-------------------- LZ急了.微软哭了。我被雷了.. --------------------编程问答-------------------- 尸体类。。。
补充:.NET技术 , LINQ