小编Jam*_*mes的帖子

FacebookOAuthClient去哪儿了?

我刚刚"升级"到c#SDK的6.1.0,发现FacebookAuthClient已被删除.我检查了github上的提交日志,那里没有太多信息.

有谁知道你应该如何使用最新版本的SDK进行身份验证?

oauth facebook-c#-sdk

7
推荐指数
1
解决办法
5243
查看次数

获取控制器和操作的完全限定URL?

获取控制器和操作的完整URL(包括协议和域)的正确方法是什么?我需要这个能够通过电子邮件发送链接到页面.

我希望只使用Url.Action()并将其连接到Request.Url的当前服务器主机名.但是,似乎Url.Action是上下文敏感的,因此如果您已经在同一个控制器中,则不会显示完整路径.

有任何想法吗?

谢谢

詹姆士

asp.net-mvc routing

6
推荐指数
1
解决办法
3855
查看次数

分层数据结构设计(嵌套集)

我正在设计一个分层数据库结构的设计,该结构模拟包含产品的目录(这与此问题类似).数据库平台是SQL Server 2005,目录非常大(750,000个产品,4个级别的8,500个目录部分),但是相对静态(每天重新加载一次),所以我们只关心READ性能.

目录层次结构的一般结构是: -

  • 1级部分
    • 2级部分
      • 3级部分
        • 4级部分(产品链接到这里)

我们使用嵌套集模式来存储层次结构级别,并将存在于该级别的产品存储在单独的链接表中.因此,简化的数据库结构将是

CREATE TABLE CatalogueSection
(
    SectionID INTEGER,
    ParentID INTEGER,
    LeftExtent INTEGER,
    RightExtent INTEGER
)

CREATE TABLE CatalogueProduct
(
    ProductID INTEGER,
    SectionID INTEGER
)
Run Code Online (Sandbox Code Playgroud)

我们确实有一个额外的复杂性,因为我们有大约1000个独立的客户群,这些客户群可能会也可能不会看到目录中的所有产品.因此,我们需要为每个客户组维护一个单独的"副本"目录层次结构,这样当他们浏览目录时,他们只能看到他们的产品,而且他们也看不到任何空的部分.

为了便于实现这一点,我们在下面的部分"维护"了一个层次结构的每个级别的产品数量表.因此,即使产品仅直接链接到层次结构的最低级别,它们也会在树中一直计算.这个表的结构是

CREATE TABLE CatalogueSectionCount
(
    SectionID INTEGER,
    CustomerGroupID INTEGER,
    SubSectionCount INTEGER,
    ProductCount INTEGER
)
Run Code Online (Sandbox Code Playgroud)

因此,对于问题 ,层次结构的顶层级别的性能非常差.显示所选目录部分(以及所有子部分)中"前10名"产品的一般查询正在1分钟内完成.在层次结构的较低部分,它更快但仍然不够好.

我已经在所有关键表上放置了索引(包括覆盖索引),通过查询分析器,索引调整向导等运行它,但仍然无法让它执行得足够快.

我想知道设计是否存在根本缺陷,还是因为我们有这么大的数据集?我们有一个合理的开发服务器(3.8GHZ Xeon,4GB RAM),但它只是不工作:)

谢谢你的帮助

詹姆士

database sql-server database-design

4
推荐指数
1
解决办法
3312
查看次数

改变我们的BL设计 - 哪种模式最有用?

我正在重构我们的BI层,以使我们的代码更"松散耦合",我有兴趣听到你们认为可能有意义的改进吗?

目前,我们的API类似于以下内容: -

// Fetch a collection of objects
ProductCollection prods = Product.GetProducts();

// Load an individual object, make change and save it back
Product p = new Product();
if(p.Load(productID))
{
    p.Name = "New Name";
    p.Save();
}
Run Code Online (Sandbox Code Playgroud)

如您所见,我们获取对象集合/加载单个对象和保存更改的方法都内置在"Model"类中.我们的每个Model类都继承自ObjectBase基类,该基类包括数据库访问函数和更改跟踪,因此当有人通过属性更改值时,对象会自动标记为脏,并且会向任何订阅这些事件的对象(UI)触发通知.

我想要做的是使用"存储库模式",以便我们可以从模型中抽象出数据库实现.但是,我一直在研究的大部分代码似乎都暗示"模型"类不应该包含任何智能,而应该只是数据的容器.相反,应该通过使用服务来应用逻辑.这是否意味着完成上述我需要做的事情

List<Product> prods = ProductService.GetProducts();

Product p = ProductService.GetSingleProduct(productID);
p.Name = "New Name";

ProductService.SaveProduct(p);
Run Code Online (Sandbox Code Playgroud)

这似乎是一种更复杂的方式,并且使得在业务对象中封装功能变得更加困难.

有人可以解释为什么这是一个更好的方式,或者我可能误解了这些概念?

谢谢

詹姆士

architecture design-patterns

3
推荐指数
1
解决办法
395
查看次数

正则表达式替换一个单词中间的连字符

我需要一个正则表达式来替换任何单词中间的连字符,但不要触及前导或尾随或单独的连字符.这适用于Regex.Replace()中的.NET

我尝试了以下内容

\w[-]\w
Run Code Online (Sandbox Code Playgroud)

但这也捕获了连字符两侧的字符.举个例子,我需要的是以下字符串

- 测试 - 测试 - 测试

如果替换字符是!,成为

- 测试!测试 - 测试

任何帮助都很受欢迎

谢谢

詹姆士

.net regex

2
推荐指数
1
解决办法
4001
查看次数

如何最好地实施"网站关闭"功能?

我们要求通过远程通知(数据库值的更改)自动关闭我们的ASP.NET MVC网站.哪里是实施这个的最佳地点?

  • 基础控制器类
  • Global.asax中
  • 自定义属性
  • 其他

更新

很多建议使用app_offline,但这种情况将每天发生,并且将完全由数据库启动,所以我宁愿让应用程序采取主动而不是外部推送文件.

此外,我可能需要将用户重定向到保留页面(最好是MVC控制器方法,以保持一致).我更倾向于在我的BaseController中捕获它并处理它

asp.net-mvc

0
推荐指数
2
解决办法
1366
查看次数