我使用EntityFramework(EF V6)和Asp.Net创建一个网站,我已经创建了.edmx和.tt以及DBContext。
我试图为每个表创建一个对象,以便稍后用aspx召唤它
我不知道我是否以正确的方式编写了我的LINQ查询!这就是为什么我需要你的帮助。
表格我试图在这张图片中为它建立一个LINQ对象:
我创建的这个对象类:
public class LINQSubjects
{
NewsPaperEntities ctx = new NewsPaperEntities();
// Get Subject
public Subject GetSubject(int SubjectID)
{
Subject sub = ctx.Subjects.FirstOrDefault(s=> s.Subject_ID==SubjectID);
return sub;
}
// Get All Subject Info
public List<Subject> GetAllSubjects()
{
List<Subject> sublist = (from s in ctx.Subjects select s).ToList<Subject>();
return sublist;
}
// Insert a Subject
public void AddSubject(Subject Addsub)
{
ctx.Subjects.Add(Addsub);
ctx.SaveChanges();
}
// Delete a Subject
public void DeleteSubject(int SubjectID)
{
Subject sub = ctx.Subjects.FirstOrDefault(s => s.Subject_ID == SubjectID);
ctx.Subjects.Remove(sub);
ctx.SaveChanges();
}
// Edit a Subject
public void UpdateSubject(Subject Newsub)
{
Subject Oldsub = ctx.Subjects.FirstOrDefault(s => s.Subject_ID == Newsub.Subject_ID);
Oldsub = Newsub;
ctx.SaveChanges();
}
}
是对还是错?
答案 0 :(得分:3)
这是我要改变的唯一方法,其余的看起来正确。
<强>更新强>
public List<Subject> GetAllSubjects()
{
List<Subject> sublist = ctx.Subjects.ToList();
return sublist;
}
public void DeleteSubject(int SubjectID)
{
Subject sub = ctx.Subjects.FirstOrDefault(s => s.Subject_ID == SubjectID);
if(sub!=null)//FirstorDefault can return null
{
ctx.Subjects.Remove(sub);
ctx.SaveChanges();
}
}
//This is with the assumption that the parameter Newsub is attached to the context already.
//As in you got the sub from the context then changed it then passed it into UpdateSubject
public void UpdateSubject(Subject Newsub)
{
Subject Oldsub = ctx.Subjects.FirstOrDefault(s => s.Subject_ID == Newsub.Subject_ID);
if(Oldsub !=null)//FirstorDefault can return null
{
Oldsub = Newsub;
//If Newsub is not attached you have to set manually set each property.
//i.e.Oldsub.Name = Newsub.Name;
ctx.SaveChanges();
}
}
答案 1 :(得分:1)
我建议您将逻辑更改为使用块中的新上下文,而不是引用共享上下文。 EF Context的生活:
using(var ctx = new NewsPaperEntities())
{
ctx.Subjects.Add(Addsub);
ctx.SaveChanges();
}
以下是决定生命周期的一般指导原则 上下文:
- 使用长时间运行的上下文时,请考虑以下事项:
- 当您将更多对象及其引用加载到内存中时,内存 消费的背景可能会迅速增加。这可能会导致 表现问题。
- 请记住处理上下文 不再需要。
- 如果异常导致上下文出现在 不可恢复的状态,整个申请可能会终止。
- 遇到与并发相关的问题的可能性随着差距的增加而增加 在查询和更新数据的时间之间增长。
- 使用Web应用程序时,请按请求使用上下文实例。
- 使用Windows Presentation Foundation(WPF)或Windows窗体时,请为每个窗体使用上下文实例。这使您可以使用上下文提供的更改跟踪功能。
参考:https://msdn.microsoft.com/en-us/data/jj729737.aspx?f=255&MSPPError=-2147217396