小编Tra*_*s J的帖子

如何授权一组控制器而不在每个控制器上放置注释?

我有一组控制器,每个控制器用于每种授权类型.例如,A类授权将拥有一组控制器,每个控制器都需要A类授权.有没有办法将一个[Authorize(Role="Class A")]属性放在某个适用于每个控制器的地方,而不必用相同的属性装饰每个控制器?

asp.net-mvc controller authorize authorize-attribute asp.net-mvc-3

8
推荐指数
1
解决办法
6414
查看次数

尝试捕捉视图不好的做法?

在MVC3应用程序中,@{ }.cshtml视图中使用razor块内的try catch块被认为是不好的做法吗?

view try-catch razor asp.net-mvc-3

8
推荐指数
2
解决办法
2万
查看次数

如何使用MySQL Connector/NET在深度为2的对象图上使用Entity Framework?

以下是Oracle确认的错误报告:http://bugs.mysql.com/bug.php?id = 67183

情况

.Include我在我的存储库中使用链时,我注意到我得到了奇怪的结果 - 主要是被查询的值是从错误的字段返回的(例如,名称最终会出现在描述中 - 但在数据库中所有的值都是正确,他们只在查询后显示错误).我更改了名称,因此关系更加明显,但结构是一样的.我一直在为相关的CrewMember及其相对排名和清除得到错误的值.看起来如果CrewMember中的字段名称与Rank相同,则Rank中该字段的值将变为CrewMember中的值.例如,如果Rank有描述,CrewMember也是如此,那么CrewMember的Rank描述将是CrewMember的描述.

当由于MySQL Connector/NET sql提供程序无法正确形成join语句而导致类似字段定义时,实体框架无法在2的深度进行格式良好的查询.

定义

这是一个为数据库表建模的类定义.我正在使用C#ASP.NET MVC 3与Entity Framework 4.1和MySQL Connector/NET 6.5版

public class Harbor
{
 public int HarborId { get; set; }
 public virtual ICollection<Ship> Ships { get; set; }
 public string Description { get; set; }
}

public class Ship
{
 public int ShipId { get; set; }
 public int HarborId { get; set; }
 public virtual Harbor Harbor { get; set; } …
Run Code Online (Sandbox Code Playgroud)

c# mysql linq eager-loading entity-framework-4.1

8
推荐指数
2
解决办法
4085
查看次数

为什么不抛出这个异常?

我有时会使用一组任务,为了确保它们都在等待我使用这种方法:

public async Task ReleaseAsync(params Task[] TaskArray)
{
  var tasks = new HashSet<Task>(TaskArray);
  while (tasks.Any()) tasks.Remove(await Task.WhenAny(tasks));
}
Run Code Online (Sandbox Code Playgroud)

然后像这样调用它:

await ReleaseAsync(task1, task2, task3);
//or
await ReleaseAsync(tasks.ToArray());
Run Code Online (Sandbox Code Playgroud)

但是,最近我注意到了一些奇怪的行为,并设置了ReleaseAsync方法是否存在问题.我设法将它缩小到这个简单的演示,如果你包含它,它将在linqpad中运行System.Threading.Tasks.它也可以在控制台应用程序或asp.net mvc控制器中稍作修改.

async void Main()
{
 Task[] TaskArray = new Task[]{run()};
 var tasks = new HashSet<Task>(TaskArray);
 while (tasks.Any<Task>()) tasks.Remove(await Task.WhenAny(tasks));
}

public async Task<int> run()
{
 return await Task.Run(() => {
  Console.WriteLine("started");
  throw new Exception("broke");
  Console.WriteLine("complete");
  return 5;
 });
}
Run Code Online (Sandbox Code Playgroud)

我不明白为什么异常永远不会出现在任何地方.我想如果等待具有异常的任务,它就会抛出.我能够通过用这样的简单替换while循环来确认这一点:

foreach( var task in TaskArray )
{
  await task;//this will throw …
Run Code Online (Sandbox Code Playgroud)

.net c# exception task async-await

8
推荐指数
2
解决办法
1838
查看次数

从F#中的列表中删除nans

我想nan从列表中删除s,所以我实现了下面显示的函数.

val it : float list =
  [50.0; -20833.33333; 4.50701062e-14; -4.267032701e-15; 3.942195769e-16;
   -3.555114863e-17; 3.130384319e-18; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 
   nan; nan; nan; nan; nan; nan; nan; nan; nan]

let rec remove_nan l =
    match l with
    | [] -> []
    | x::rest -> if x=nan then remove_nan rest
                 else x::(remove_nan rest)

remove_nan points
Run Code Online (Sandbox Code Playgroud)

但是,它不会nan从列表中删除.他们为什么不被删除?

f# list nan

8
推荐指数
1
解决办法
649
查看次数

软删除与DB存档

建议阅读

  • 类似:软删除是个好主意吗?
  • 好文章:http://weblogs.asp.net/fbouma/archive/2009/02/19/soft-deletes-are-bad-m-kay.aspx

    我怎么在这里结束

    我非常相信,在制作软件时,任何事情都要事先做好,以便以后最大限度地减少工作量.因此,我试图确保在接近我的数据库架构和维护时,它可以保持关系完整性,而不是过时或过于复杂.

    在查看典型的删除方法CASCADE时,这会让人有些不寒而栗.哎呀,对我目前的情况来说有点过头了.我想保持关系图的完整性,但我不想删除每个图只是因为链的一部分是无关紧要的.因此,我选择采用软删除的方式,以确保数据完整性保留,同时记录可以从相关性中删除.我通过在数据库中的每个叹息表中添加"DateDeleted"字段来完成此操作.

    转折点

    然而,这显然开始增加太多的复杂性并且值得付出努力.我将逻辑放在不应该去的地方,并且不想在整个应用程序中使这些不良做法永久化.简而言之,我将回滚此实现.

    在查找天气或不是人们喜欢软删除时,似乎有很多支持它.事实上,链接的"相似"帖子顶部是"我总是软删除"的最高投票回答.此外,那里和SO周围的大多数答案包括某种"isDeleted"或"isActive"类型的方法.

    新的实施理念

    链接的"好文章"涵盖了我实际遇到的一些问题.它还提出了一种替代软删除的方法,我从最佳实践的角度出发.建议使用"存档数据库",我在查看软删除时实际考虑过.我决定反对它的原因是因为我之前提到的有关CASCADE删除的观点.我很谨慎从数据库中删除整个图表,因为链的一部分被删除了.但是,这个图表至少可以从档案中保留,所以我不确定它真的那么糟糕.

    十字路口

    那么,我应该继续添加逻辑,逻辑,逻辑......逻辑吗?或者,我是否应该考虑创建归档数据库,其中大多数逻辑只是位于一个非常复杂的图形管理类中来存储/恢复关系对象图?后者似乎对我来说是最好的做法.

  • relational-database soft-delete

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

    GetOriginalTypeParameterType throws未将对象引用设置为对象异常的实例

    参考:如何将动态用作通用?

    public void CheckEntity(int entityId, string entityType = null)
    {
     dynamic AnyObject = Activator.CreateInstance("Assembly","Assembly.Models.DbModels." + entityType).Unwrap();
     CheckWithInference(AnyObject, entityId);
    }
    
    private static void CheckWithInference<T>(T ignored, int entityId) where T : class
    {
     Check<T>(entityId);
    }
    
    private static void Check<T>(int entityId) where T : class
    {
     using (var gr = new GenericRepository<T>())
     {
     }
    }
    
    Run Code Online (Sandbox Code Playgroud)

    这进入了CheckEntity(16,"Container");.第一行运行后,使用调试器检查时AnyObject变为空白Assembly.Models.DbModels.Container.如果var AnyType = AnyObject.GetType();使用,则AnyType显示为Assembly.Models.DbModels.Container.但是,当调用CheckWithInference(AnyObject, entityId);使得异常被抛出时.

  • outer:对象引用未设置为对象的实例.
  • inner:Microsoft.CSharp.RuntimeBinder.SymbolTable.GetOriginalTypeParameterType(Type t)+10

    我在这里做了一个自包含的例子 - 但它运行没有错误:(

    注意,这是在asp.net mvc …

  • c# generics dynamic asp.net-mvc-3

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

    保存带有id的元素的变量在哪里存储?

    此问题(可通过ID访问的元素)指出,如果元素具有id,则可以基于该id通过变量名访问它.它引起了我的兴趣,因为我在使用Visual Studio 2010进行开发时看到了这个变量.我出于好奇做了一些测试,结果发现它document.getElementById()仍然比使用变量名更快.所以,我开始尝试浏览窗口,确定它必须window["idName"]在调试中,并且console.log(window)无法找到变量实际存储的位置.

    当一个元素在html中定义时,<div id="foo">它在带有变量的javascript中可用foo(我不打算使用它,这是不好的做法).存储的变量在哪里?

    html javascript dom

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

    在等待时执行延迟函数所依赖的代码

    在下面的最小示例中,延迟替换旧内容setTimeout以便为用户提供完成查看的时间.同时,正在准备新内容,以避免在潜在的昂贵任务期间阻塞用户界面.

    var div = document.getElementById('wrapper');
    var newContent = document.createElement('ul');
    
    setTimeout(function() {
      var header = div.firstElementChild;
      header.innerHTML = 'New Content';
      header.nextElementSibling.remove();
      div.appendChild(newContent);
    }, 2000);
    
    // Make new content while we wait
    [1, 10, 100, 1000].forEach(function(x) {
      var li = document.createElement('li');
      li.innerHTML = 'Factorial of ' + x + ' is ' + factorial(x);
      newContent.appendChild(li);
    });
    
    function factorial(num) {
      if (num === 0) {
        return 1;
      } else {
        return (num * factorial(num - 1));
      }
    }
    Run Code Online (Sandbox Code Playgroud)
    <div id='wrapper'>
      <h1>Old …
    Run Code Online (Sandbox Code Playgroud)

    javascript settimeout

    7
    推荐指数
    2
    解决办法
    347
    查看次数

    如何将动态代理转换为POCO?

    我正在尝试序列化域模型并遇到一个需要将动态代理转换为POCO的问题.我遇到的问题是通过模型中的虚拟属性存在循环引用.虽然我试图使用[ScriptIgnore]序列化程序不解析这些属性,但它仍然可以.我相信这是因为对象是动态代理,并且属性中仍然存在一些导致解析器进入的残余(这反过来导致递归错误"循环引用" - 我尝试将递归限制为3步但我得到了错误"超出递归步骤").

    如何将对象从动态代理转换为POCO以便可以序列化?

    编辑:简单的例子

    public class One : BaseViewModel
    {
        public int OneId { get; set; }
        public virtual ICollection<Two> Two { get; set; }
    }
    
    public class Two
    {
        public int TwoId { get; set; }
        public int OneId { get; set; }
        [ScriptIgnore]
        public virtual One One { get; set; }
    }
    
    public abstract class BaseViewModel
    {
        public string AsJson()
        {
            var serializer = new JavaScriptSerializer();
            return serializer.Serialize(this);
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)

    c# serialization dynamic-proxy entity-framework-4.1 asp.net-mvc-3

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