我有一个Asset对象,它有一个属性AssignedSoftware,它是一个集合.
我想确保同一件软件不会多次分配给一个资产.在Add方法中,我检查软件是否已经存在,如果存在,我想抛出异常.
我应该抛出一个标准的.NET异常吗?或者最佳实践是否要求我创建自己的自定义异常?
我昨天晚上发布了这个问题,这让我发现了一个很大的问题!
我的数据库中有一个名为Units的十进制列,只要我将列的值设置为NON ZERO,并使用新值SubmitChanges列更新.如果我尝试将列的值设置为ZERO,则SubmitChanges不会更新列.
data.Units = this.ReadProperty<decimal>(UnitsProperty);
data.UnitPrice = this.ReadProperty<decimal>(UnitPriceProperty);
data.Price = this.ReadProperty<decimal>(PriceProperty);
Run Code Online (Sandbox Code Playgroud)
我查看了DataContext日志,我可以看到查询中不包含具有ZERO值的字段.即使我试图对代码进行硬编码,Linq也会忽略它.
data.Units = 0;
data.UnitPrice = 0;
data.Price = 0;
Run Code Online (Sandbox Code Playgroud)
不用说这是杀了我!任何想法为什么会这样?
解
我在SO社区的帮助下想出了我的问题.我的问题是由于我创建我的实体附加时的事实,列的默认值设置为零,所以当它试图将值分配给零时... LinqToSql说嘿......没有改变,所以我没有更新价值.
我现在在做什么......只是为了让它发挥作用如下:
ctx.DataContext.InvoiceItems.Attach(data, true);
Run Code Online (Sandbox Code Playgroud)
这似乎迫使所有值将自己写入数据库.这适用于现在.
我最近收到了客户的错误报告,并且没有解决它的运气.我希望有人能给我一些有关可能出错的信息.
错误似乎很简单:
Csla.DataPortalException:DataPortal.Delete失败(System.InvalidOperationException:Sequence在System.Linq.Enumerable.SingleOrDefault [TSource]中包含多个元素(IEnumerable`1 source)
这是我的DataPortal_Delete方法,它将FileId(PK)作为参数.
private void DataPortal_Delete(SingleCriteria<File, Guid> criteria)
{
using (var ctx = ContextManager<Ronin.Data.RoninDataContext>
.GetManager(Database.ApplicationConnection, false))
{
var data = ctx.DataContext.Files
.Single(row => row.FileId == criteria.Value);
ctx.DataContext.FileSources.DeleteAllOnSubmit(data.FileSources);
ctx.DataContext.Files.DeleteOnSubmit(data);
ctx.DataContext.SubmitChanges();
}
}
Run Code Online (Sandbox Code Playgroud)
我检查的第一件事是看看是否有另一条记录具有相同的FileId(尽管是主键,这应该是不可能的).所有FileIds实际上都是唯一的.我启动了连接到客户端数据库的应用程序,并试图删除该记录,它没有任何问题.客户端站点的IT人员使用"问题步骤记录器"向我发送用户采取的操作的逐步屏幕截图.没有什么与众不同的,当他使用不同的机器时,他能够毫无错误地删除记录.显然,只有在Windows 7中运行应用程序时才会发生这种情况.
那说,有什么可能导致这个的想法?
我的数据库中有一个表,用于记录特定任务的开始和停止时间.以下是数据示例:
Start Stop
9/15/2008 5:59:46 PM 9/15/2008 6:26:28 PM
9/15/2008 6:30:45 PM 9/15/2008 6:40:49 PM
9/16/2008 8:30:45 PM 9/15/2008 9:20:29 PM
9/16/2008 12:30:45 PM 12/31/9999 12:00:00 AM
Run Code Online (Sandbox Code Playgroud)
我想编写一个脚本,总计这些时间框架的经过时间,并且只要有12/31/9999日期,我希望它使用当前日期和时间,因为这仍在进行中.
我如何使用Transact-SQL执行此操作?
我遇到了一个问题,我在UpdatePanel中有一个FileUpload控件.当我尝试保存更改并上传文件时,找不到任何文件.如果我删除UpdatePanel似乎一切正常.
任何想法为什么会这样?是否有解决方法?

我目前正在使用ASP.NET MVC构建应用程序.数据输入页面相当容易编码,我只是为我的业务对象类型的页面制作模型:
namespace MyNameSpace.Web.Views.ProjectEdit
{
public partial class MyView : ViewPage<Project>
{
}
}
Run Code Online (Sandbox Code Playgroud)
我正在努力寻找实现仪表板界面的最佳方法,使用独立的部件,使用ASP.NET MVC,其中每个部分的模型会有所不同?我假设每个部分都是MVC用户控件.
另外,我怎么能这样做,所以每个部分都是可测试的?
我有一个我写的Windows窗体应用程序,它对收件箱和数据库进行了一些监视.客户告诉我,每次服务器重新启动时都需要运行.让我感到羞耻的是让客户改变了要求.
我在想...有没有办法让Windows Forms应用程序作为服务运行,以便它自动启动?
澄清
我想尝试不再编写任何代码......如果可能的话!
我有以下代码:
[AcceptVerbs(HttpVerbs.Post), Authorize(Roles = RoleKeys.Administrators)]
public ActionResult Edit(int id, FormCollection collection)
{
User user = userRepository.GetUser(id);
try
{
this.UpdateModel(user);
userRepository.Save();
return this.RedirectToAction("Details", new { id = user.UserId });
}
catch
{
this.ModelState.AddModelErrors(user.GetRuleViolations());
return View(new UserFormViewModel(user));
}
}
Run Code Online (Sandbox Code Playgroud)
如果当前登录的用户不是管理员角色,则会将其踢回登录屏幕.用户已登录,他们只是未授权执行请求的操作.
有没有办法让它们重定向到特定的视图,例如,AccessDenied?
我试图压缩特定属性的以下StyleCop消息:
SA1513: Statements or elements wrapped in curly brackets must be followed by a blank line.
Run Code Online (Sandbox Code Playgroud)
我正在尝试执行以下操作,但它似乎不起作用:
[SuppressMessage("Microsoft.StyleCop.CSharp.DocumentationRules", "SA1513:ClosingCurlyBracketMustBeFollowedByBlankLine", Justification = "There are no issues with this code")]
public string CustomerId
{
get
{
return this.GetProperty(CustomerIdProperty);
}
set
{
if (this.IsNew)
{
this.SetProperty(CustomerIdProperty, value);
}
else
{
throw new ReadOnlyException("Id value can only be changed for a new record.");
}
}
}
Run Code Online (Sandbox Code Playgroud)
我只是做错了吗?或者这是不可能的?这是一个很好的规则,就我的财产而言无效.
更新
尝试从DocumentationRules切换到LayoutRules ...仍然没有抑制.
[DataObjectField(true, false)]
[SuppressMessage("Microsoft.StyleCop.CSharp.LayoutRules", "SA1513:ClosingCurlyBracketMustBeFollowedByBlankLine", Justification = "There are no issues with this code")]
public …Run Code Online (Sandbox Code Playgroud) 我有一个 Blazor WebAssembly 应用程序,它使用 Azure AD B2C 进行身份验证。
builder.Services.AddMsalAuthentication(options =>
{
builder.Configuration.Bind("AzureAdB2C", options.ProviderOptions.Authentication);
});
Run Code Online (Sandbox Code Playgroud)
当用户被重定向到身份验证时,Blazor 会在弹出窗口中显示登录信息。
弹出窗口的问题在于,如果用户点击弹出窗口之外的屏幕,他们可能会将其隐藏起来。
想知道是否有办法强制身份验证重定向到页面而不是显示弹出窗口。
c# ×3
.net ×2
asp.net-mvc ×2
linq-to-sql ×2
ajax ×1
asp.net ×1
blazor ×1
collections ×1
csla ×1
dashboard ×1
exception ×1
file ×1
linq ×1
security ×1
sql ×1
sql-server ×1
stylecop ×1
t-sql ×1
web-parts ×1
winforms ×1