假设我正在开发一个在线商店项目。因此,我必须在数据库中创建一个名为“Product”的表。假设我还希望用户能够“喜欢”我的产品。这需要我创建另一个名为“ProductLike”的表来存储用户的 ID 以及他们喜欢的产品的 ID(联结表)。
主要场景:每次用户向我的网站发送请求以获取产品页面时,我都必须重新计算该产品的点赞数。
我的问题是:所以,我知道标准方法不是将“计算值”存储在数据库中(规范化)。但像这样的案例呢?(我的意思是计算某些东西可能会很昂贵的情况)。例如,在上面的示例中,在“Product”表中拥有一个名为“NumberOfLikes”的列来存储计算出的产品点赞数以便快速检索不是更好吗?
我有一个 SVG 图标,我为它设置了一个固定的高度(比如 50 像素),但我希望它的宽度是自动的,也就是说,无论它需要什么都取决于图标。(很常见和正常的情况,对吧?)。
现在,我一直把头撞在墙上的问题是,我打算用<symbol>标签定义它,然后使用<use href="...标签引用它,而不是将 SVG 内联嵌入到 HTML 中,然后这样做显然需要我设置一个固定的宽度和一个固定的高度,否则它总是默认为大约 150px,而不是仅仅默认为图标的宽度;当您直接嵌入 SVG 时,情况并非如此,您可以在以下两个片段中看到所有这些都在起作用:
直接嵌入SVG:(按预期工作,宽度与图标的宽度一致)
.icon {
height: 50px;
width: auto;
/* Aesthetics: */
background-color: gray;
border-radius: 5px;
}Run Code Online (Sandbox Code Playgroud)
<svg class="icon" viewBox="0 0 22.832 27.398">
<g transform="translate(-42.667)"> <g transform="translate(42.667)"> <path class="a" d="M62.074,9.133V7.991a7.991,7.991,0,1,0-15.982,0V9.133a3.429,3.429,0,0,0-3.425,3.425V23.973A3.429,3.429,0,0,0,46.092,27.4H62.074A3.429,3.429,0,0,0,65.5,23.973V12.557A3.429,3.429,0,0,0,62.074,9.133Zm-13.7-1.142a5.708,5.708,0,0,1,11.416,0V9.133H48.375ZM63.216,23.973a1.143,1.143,0,0,1-1.142,1.142H46.092a1.143,1.143,0,0,1-1.142-1.142V12.557a1.143,1.143,0,0,1,1.142-1.142H62.074a1.143,1.143,0,0,1,1.142,1.142Z" transform="translate(-42.667)"></path> </g> <g transform="translate(50.658 13.128)"> <path class="a" d="M195.425,245.333a3.416,3.416,0,0,0-1.142,6.639v1.922a1.142,1.142,0,1,0,2.283,0v-1.922a3.416,3.416,0,0,0-1.142-6.639Zm0,4.566a1.142,1.142,0,1,1,1.142-1.142A1.143,1.143,0,0,1,195.425,249.9Z" transform="translate(-192 -245.333)"></path> </g> </g>
</svg>Run Code Online (Sandbox Code Playgroud)
但是使用<use>标签:(宽度不知从何而来!)
.icon {
height: 50px;
width: auto;
/* Aesthetics: */
background-color: gray;
border-radius: 5px;
}Run Code Online (Sandbox Code Playgroud)
<svg style="display: none;">
<symbol …Run Code Online (Sandbox Code Playgroud)我一直在学习委托(在 C# 中),我读过的所有文章都说委托不能重载(与方法不同)。但是当我使用 'Func' 和 'Action' 方法(它们是 .NET 内置委托)时,我注意到它们已被重载:
这怎么可能?
我正在为我的ASP.NET应用程序执行密码重置机制.
我想知道,如果有人获得访问我的数据库,他们可以轻松读取密码重置令牌并更改用户的密码,我不应该散列'密码重置令牌',然后将它们存储在我的数据库中?
注意:我说的是"密码重置令牌",而不是实际的"密码"
我想要几个使用表达式树动态创建的例程。似乎使用它们的最简单方法是创建LambdaExpression然后调用LambdaExpression.
Compile()产生一个可调用的委托。
Compile()?TypeBuilder使用and创建一个新类型并包含所有例程作为该类型的静态方法是否更好MethodBuilder?欢迎任何建议!
这似乎是一个非常基本的问题,但我还没有找到我正在寻找的答案。
假设您有一个名为 的 Blazor 组件<Button>,该组件具有诸如Label等参数。当您使用该组件时,这些参数的接收方式类似于 HTML 属性:
<Button Label="Sign Up" />
Run Code Online (Sandbox Code Playgroud)
但是如何为组件设置实际的 HTML 属性?!例如,假设您想为组件表示的元素提供额外的类,或标题属性、角色或类型等。以下显然不起作用,因为组件标记上的所有属性都是预期的成为该组件的参数:
<Button Label="Sign Up" class="foo" type="submit" id="bar" />
Run Code Online (Sandbox Code Playgroud)
因此,我能想到的唯一方法是为该组件内的每个属性声明一个参数(公共属性)。
<button type="@Type" class="button @Class" id="@Id">@Label</button>
@code {
[Parameter]
public string Class { get; set; }
[Parameter]
public string Type { get; set; }
[Parameter]
public string Role { get; set; }
[Parameter]
public string Id { get; set; }
// And others
}
Run Code Online (Sandbox Code Playgroud)
然后在使用组件时你这样做:
<Button Label="Sign Up" Class="foo" Id="bar" Type="Submit" />
Run Code Online (Sandbox Code Playgroud)
但这显然并不理想。这不方便,而且看起来像是一个不必要的抽象层。
所以,我的问题是:这应该怎么做?如果有这样的事情,那么“标准”的方法是什么。难道没有比为每个属性声明参数更方便的方法吗?
我一般是 …
我一直在搜索这个问题几个小时,但我找不到答案所以我问它:
我正在寻找一种方法或一些四舍五入25,599,999至25,000,000或25,599,999到30,000,000:
int num1 = 25599999;
Console.WriteLine(RoundDown(num1, 6 /* This is the places (numbers from end that must be 0) */)) // Should return 25,000,000;
Run Code Online (Sandbox Code Playgroud)
或者向上:
int num1 = 25599999;
Console.WriteLine(RoundUp(num1, 6 /* This is the places (numbers from end that must be 0) */)) // Should return 30,000,000;
Run Code Online (Sandbox Code Playgroud)
注意:我不是在寻找一种舍入十进制数的方法.