这是一个坏主意吗?有没有更好的方法来达到同样的效果?
// assume that "name" is a string passed as a parameter to this code block
try
{
MainsDataContext dx = new MainsDataContext();
try
{
Main m = dx.Main.Single(s => s.Name == name);
return m.ID;
}
catch (InvalidOperationException)
{
Guid g = Guid.NewGuid();
Main s = new Main
{
Name = name,
ID = g
};
dx.Mains.InsertOnSubmit(s);
dx.SubmitChanges();
return g;
}
}
catch (Exception ex)
{
// handle this
}
Run Code Online (Sandbox Code Playgroud)
这里的目标是获取记录的ID(如果存在),否则创建该记录并返回其ID.
您应该使用SingleOrDefault,如果记录不存在,它将返回该类的默认值为null.
MainsDataContext dx = null;
try
{
dx = new MainsDataContext();
Main m = dx.Main.SingleOrDefault(s => s.Name == name);
if ( m == null)
{
Guid g = Guid.NewGuid();
m = new Main
{
Name = name,
ID = g
};
dx.Mains.InsertOnSubmit(m);
dx.SubmitChanges();
}
return m.ID;
}
catch (Exception ex)
{
// handle this
}
finally
{
if(dx != null)
dx.Dispose();
}
Run Code Online (Sandbox Code Playgroud)
在使用DataContext时使用using关键字是个好主意
using ( MainsDataContext dx = new MainsDataContext())
{
Main m = dx.Main.SingleOrDefault(s => s.Name == name);
if ( m == null)
{
Guid g = Guid.NewGuid();
m = new Main
{
Name = name,
ID = g
};
dx.Mains.InsertOnSubmit(m);
dx.SubmitChanges();
}
return m.ID;
}
Run Code Online (Sandbox Code Playgroud)
Main m = dx.Main.SingleOrDefault(s => s.Name == name);
if (m == default(Main))
{
// it does not exist
}
else
{
// it does exist
}
Run Code Online (Sandbox Code Playgroud)
从问题中可以看出,类型(编辑:我只是意识到实际上它必须是一个类),因此我使用Main是类还是结构default()而不仅仅是比较null.
| 归档时间: |
|
| 查看次数: |
1579 次 |
| 最近记录: |