实用主义者赢得了代理键与自然主键的争论,支持代理键*。在我自己的工作中,我总是毫不犹豫地使用 SQL Server 标识列。但我突然想到,对于第一种范式的表,我应该能够识别自然键并使用唯一约束来强制执行它。我无法对数据库中的所有表执行此操作,因此我的数据库甚至不符合规范化的最低标准。
您是否同意具有代理主键的表也必须对自然键具有唯一约束才能处于 1NF 中?
*我认为 Joe Celko 仍在打一场精彩的比赛,请参阅最后一段。
编辑添加:感谢您的答复。我的印象是添加唯一约束不是一种常见的做法,所以我有点惊讶到目前为止的反应是一致的。
我有一些XML数据存储在SQL Server 2005上的varchar(max)列中.数据的格式为(FQTN =完全限定类型名称):
<?xml version="1.0" encoding="utf-16"?>
<History xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<EntityViews>
<EntityProxy Type="FQTN" Key="386876" />
<EntityProxy Type="FQTN" Key="387981" />
<!-- etc. -->
</EntityViews>
</History>
Run Code Online (Sandbox Code Playgroud)
如何选择Type,Key以便从此列的XML数据中获取单行的表格结果?该表具有名为HistoryId的标识主键.
我正在使用MVC5的IAuthenticationFilter接口实现基本身份验证.我的理解是,现在这是首选方法,而不是使用DelegatingHandler.我已经开始工作,但响应中没有返回www-authenticate标头.这是我对ChallengeAsync的实现:
public async Task ChallengeAsync(HttpAuthenticationChallengeContext context, CancellationToken cancellationToken)
{
var result = await context.Result.ExecuteAsync(cancellationToken);
if (result.StatusCode == HttpStatusCode.Unauthorized)
{
result.Headers.WwwAuthenticate.Add(new AuthenticationHeaderValue("Basic", "realm=localhost"));
}
}
Run Code Online (Sandbox Code Playgroud)
如果我在AuthenticateAsync中设置它,则会返回标头,但我认为我应该在ChallengeAsync中设置它.示例实现很难找到.
c# asp.net-mvc basic-authentication asp.net-web-api asp.net-mvc-5
我正在尝试将NHibernate用于带有旧数据库的新应用程序.它运行得很好,但我陷入困境,无法找到解决问题的好方法.
假设我有这个模型:
所以我绘制了这个并且一切顺利.现在我可以检索一部电影,获取所有相关的内容,...我的应用程序是电影商店"发电机".每个"服务"实际上是一个不同的商店,当用户进入我的网站时,他被重定向到其中一个商店,显然,我必须向他展示他的商店可用的电影.这个想法是:用户来了,他的服务得到认可,我向他展示了与他的服务相关的内容.我需要能够为后台检索电影的所有内容.我正在尝试用NHibernate找到最透明的方法来实现这一点.我无法真正对db模型进行更改.
我想了几个解决方案:
将服务条件添加到我的所有查询中.会工作,但它有点麻烦.该模型非常复杂,有大量的表/查询..
使用nhibernate过滤器.看似理想并且工作得很好,我在所有映射中添加了serviceid上的过滤器,并在我的用户服务被识别后立即执行了EnableFilter但是... nhibernate过滤的集合不适用于第二个lvl缓存(在我的情况下是redis)和第二个lvl缓存使用是必需的.
将计算属性添加到我的对象,如Movie.PublishedContents(Int32 serviceId).可能会工作但需要编写大量代码并"污染"我的域名.
添加从我的nhibernate实体继承的新实体,如PublishedMovie:Movie,它只显示上下文数据
这些都不能让我满意.有没有办法做到这一点?
谢谢 !
这会编译,但第二种方法被标记为"函数在所有路径上递归".并调用它会导致StackOverflowException.Intellisense(带有ReSharper)提供了Invoke作为属性.
public class Class1
{
public void MyMethod(string value)
{
Console.WriteLine(value);
}
public void MyMethod(Func<string> getValue)
{
MyMethod(getValue.Invoke);
}
}
Run Code Online (Sandbox Code Playgroud)
将其更改为此按预期工作:
public void MyMethod(Func<string> getValue)
{
MyMethod(getValue.Invoke());
}
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?这只是Intellisense的怪异还是实际上有一个Invoke属性?
在刷新所有更改的实体之前,我需要编写一些业务逻辑结构。我尝试过的解决方案之一是 IPreUpdateEventListener。但是这个事件监听器已经将对象非规范化为键值。在非规范化之前,甚至在刷新之前,我都需要一些东西。
所以问题是如何获取已更改(脏)实体的列表。
我有一个使用CDNs的应用程序用于jQuery和其他库.某些页面的URL包含可能具有个人身份信息的slugs,例如URL:
https://mycompany.com/myapp/people/123/kilgore-trout
Run Code Online (Sandbox Code Playgroud)
包含一个人的数据库ID和他们名字的slugged版本.这可能是机密性风险,因为URL在请求的引用标头中发送到CDN.
这是一个合理的担忧吗?如果是这样,除了不使用CDN之外还有什么可以做的吗?
我的任务是创建模拟人们四处走动的模拟.可能是一群人走过餐馆或离开学校.搜索周围,我发现了一堆A*相关的东西,对一个人来说很好,但我会有一堆.人们使用这个东西的标准库吗?或者我应该看一种算法?还是一本能帮我上路的书?
我正在使用带有jQuery UI datepicker的ASP.NET文本框.文本框允许编辑,以便用户可以手动输入日期或清除现有条目.我添加了一个CompareValidator来对文本框执行数据类型检查,这在使用datepicker选择日期后会导致错误.ASP.NET客户端验证中发生错误:
Microsoft JScript runtime error: 'length' is null or not an object
Run Code Online (Sandbox Code Playgroud)
ValidatorOnChange中发生错误.我怎样才能解决这个问题?是否可以将datepicker与ASP.NET验证器控件一起使用?
我的标记是:
<asp:Label runat="server" AssociatedControlID="uxInstallDate">Install Date</asp:Label>
<asp:TextBox ID="uxInstallDate" runat="server" Columns="10" />
<asp:CompareValidator runat="server" ControlToValidate="uxInstallDate" Operator="DataTypeCheck" Type="Date" Text="*" ErrorMessage="Install Date must be a date." Display="Dynamic" />
Run Code Online (Sandbox Code Playgroud)
请注意,CompareValidator中缺少的ID属性是有意的,添加它并没有什么区别.我的jQuery初始化是:
$(document).ready(function() {
$("#<%= uxInstallDate.ClientID %>").datepicker({ changeMonth: true });
});
Run Code Online (Sandbox Code Playgroud) 根据SQL Server 2008联机丛书中的十进制和数字数据类型条目,精度为:
p(精度)小数点左侧和右侧可存储的最大小数位数.精度必须是从1到最大精度为38的值.默认精度为18.
但是,下面的第二个选择失败,"算术溢出错误将int转换为数据类型数字".
SELECT CAST(123456789 as decimal(9,0))
SELECT CAST(123456789 as decimal(9,1))
Run Code Online (Sandbox Code Playgroud) asp.net-mvc ×2
c# ×2
nhibernate ×2
sql-server ×2
.net ×1
asp.net ×1
cdn ×1
database ×1
jquery ×1
jquery-ui ×1
precision ×1
security ×1
simulation ×1
sql ×1
unit-of-work ×1
url ×1
validation ×1
xml ×1