小编And*_*son的帖子

为什么Entity Framework在一个SaveChanges()中添加多个项目这么慢?

这是前一个问题的后续跟进,我试图找出代码运行缓慢的主要原因.我想我已经把它缩小到下面的一个最小例子.我有一个基本的数据库结构如下:

public class Foo
{
    public int Id { get; set; }
    public string Bar { get; set; }
}

public class FooContext : DbContext
{
    public DbSet<Foo> Foos { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

现在,如果我有一个Foo对象列表,并希望将它们添加到数据库,建议的方法是使用AddRange().但是我注意到它花了很长时间,并且受到集合中项目数量的影响很小,即使是200这样的少量.所以我手动编写了它,并且中提琴,它运行得更快!

class Program
{
    static void Main(string[] args)
    {
        var foos = Enumerable.Range(0, 200).Select(index => new Foo { Bar = index.ToString() });

        // Make sure the timing doesn't include the first connection
        using (var context = new FooContext())
        {
            context.Database.Connection.Open(); …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework entity-framework-6

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

根据环境使用具有不同存储帐户的 Azure Functions

我目前正在设置多发布者/单订阅者体系结构,使用 Azure 存储队列来缓冲事件,并使用 Azure Functions 作为订阅者。

Publisher -> Queue -> Function
Run Code Online (Sandbox Code Playgroud)

创建功能没有问题,我想要解决的部分是如何设置相同功能的开发和生产部署。我在 Visual Studio 中创建了该函数,连接是一个常量字符串文字:

public static class FooAdded
{
    [FunctionName("FooAdded")]
    public static void Run([QueueTrigger("tracker-readings", Connection = "https://foo.queue.core.windows.net/?sv=...")]string myQueueItem, TraceWriter log)
    {
        log.Info($"C# Queue trigger function processed: {myQueueItem}");
    }
}
Run Code Online (Sandbox Code Playgroud)

如何根据我部署到开发环境还是实时环境来为连接提供不同的值?

c# azure azure-storage-queues azure-functions

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

为什么这个短程序永远不会完成?

通过调试我自己的问题,我设法重新创建了一个非常不寻常的小程序:

using System;
using System.Threading;

namespace CancelBug
{
    class Program
    {
        static void Main(string[] args)
        {
            var unused = new ManualResetEvent(false);
            var cancelled = new ManualResetEvent(false);
            Console.CancelKeyPress += (s, e) => cancelled.Set();
            Console.WriteLine("Running. The only thing to do now is ctrl+c or close the window...");
            WaitHandle.WaitAny(new[] { unused, cancelled });
            Console.WriteLine("Press enter to continue...");
            Console.Read();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我希望这个程序能够:

  • 显示第一行
  • 等到用户尝试退出程序
  • 显示第二行
  • 等到用户按下回车键
  • 出口

然而,一旦这使它通过调用WaitHandle.WaitAny,它似乎挂在随机线上.有时最后一行永远不会被打印出来,有时它会被打印,但是输入键永远不会被读取.使用更大的代码库,它可以执行更多代码行,并且仍然挂在看似随机的位置.

谁能解释这种奇怪的行为?

.net c# waithandle

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

如何在Entity Framework查询中初始化一个空列表?

我已经将列表字段添加到我的业务模型中。它尚未存储在数据库中,我希望使用以下类似内容暂时将其映射:

return MyContext.Foos.Select(foo=> new Foo
    {
        Id = foo.Id,
        Name = foo.Name,
        RequiredFeatures = new List<string>()
    }).ToList();
Run Code Online (Sandbox Code Playgroud)

但是,Entity Framework抱怨无法在LINQ to Entities查询中实例化新列表:

无法在LINQ to Entities查询中初始化实现IEnumerable'System.Collections.Generic.List`1 [[System.String,mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089]]'的类型。

基本上,它List<string>是一种复杂类型,尽管它包含默认构造函数,但该构造函数要求先运行一些初始化代码,然后才能使用列表。实体框架只是不了解如何从SQL方面生成空列表。

我还尝试使用空数组实现相同的结果:

return MyContext.Foos
    .Select(foo=> new Foo
    {
        Id = foo.Id,
        Name = foo.Name,
        RequiredFeatures = new string[0]
    }).ToList();
Run Code Online (Sandbox Code Playgroud)

LINQ to Entities不支持LINQ表达式节点类型'NewArrayBounds'。

同样,即使实体表达式简单得多,实体框架也不支持该表达式。因此,我尝试了所有数组中最简单的表达式:

return MyContext.Foos
    .Select(foo=> new Foo
    {
        Id = foo.Id,
        Name = foo.Name,
        RequiredFeatures = { }
    }).ToList();
Run Code Online (Sandbox Code Playgroud)

在构造函数和初始化程序中,LINQ to Entities仅支持属性或字段参数绑定。

我知道一种替代方法是先将所有对象加载到内存中,然后通过C#初始化列表:

return MyContext.Foos.ToList()
    .Select(foo=> …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework entity-framework-6

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

当有多个订阅者时,Azure事件网格如何处理失败?

Event Grid的文档指出,它内置了一种传递和重试机制,并提供了一个将成功或失败尝试归类的示例。该文档非常清楚单个事件处理程序会发生什么。

我的问题是,如果有多个事件处理程序,并且只有一个处理程序无法接收事件,将会发生什么?是仅针对该处理程序重试该事件,还是所有处理程序都将看到重试?

azure-eventgrid

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

我如何访问从另一个类返回的嵌套哈希映射值?Java的

我是哈希映射的新手,我试图在类的一侧创建一个嵌套的哈希映射并创建另一个类来调用它,所以这就是我的代码的样子

public class Hash {
    private HashMap<String, HashMap<String, String>> wow = new HashMap<String, HashMap<String, String>>();

    public void SetHash(){
        wow.put("key", new HashMap<String, Object>());
        wow.get("key").put("key2", "val2");
    }

    public HashMap GetMap(){
        return wow;
    }
}
Run Code Online (Sandbox Code Playgroud)

在另一个主要类的类中,它将是这样的:

public static void main(String[] args) {
   Hash h = new Hash();
   h.SetHash();
   System.out.println(h.GetMap.get("key").get("key2"));
}
Run Code Online (Sandbox Code Playgroud)

但是当我放置第二个get时,会出现错误,所以我不确定这是否可行,或者我是否应该将哈希直接放在主类中.

java hash hashtable hashmap

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

在 ServiceBusTrigger 中引用主题名称的环境变量

我想将项目添加到服务总线主题,然后取消“实时”订阅并发送到实时站点,然后取消“开发”订阅并发送到开发站点。

[FunctionName("AddFoo")]
public static async Task AddFooAsync(
    [ServiceBusTrigger("topic-foo", "Live")]QueueItem item,
    TraceWriter log)
{
    var endpoint = ConfigurationManager.AppSettings["EndPoint"];
    var httpClient = new HttpClient();
    httpClient.DefaultRequestHeaders.Add("PublisherKey", foo.PublisherKey);
    var foos = new HttpFooStore(httpClient, endpoint);

    try
    {
        await foos.AddAsync(item.Value);
    }
    catch (BadRequestException)
    {
        log.Warning("Malformed request was rejected by XXX", item.PublisherName);
        return;
    }
    catch (AuthorizationException)
    {
        log.Warning("Unauthorized request was rejected by XXX", item.PublisherName);
        return;
    }
    catch (ResourceNotFoundException)
    {
        log.Warning("Request for unknown tracker was rejected by XXX", item.PublisherName);
        return;
    }
    catch (Exception e)
    {
        log.Error("Request to XXX …
Run Code Online (Sandbox Code Playgroud)

c# servicebus azure-functions

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

从同一个VkPhysicalDevice创建两个VkDevices是否有效?

我正在为Vulkan API编写C++包装器,所以我想确保我的文档与实际的API所说的不矛盾.

Device device1 = physical_device.Connect(device_settings);
Device device2 = physical_device.Connect(device_settings);
Run Code Online (Sandbox Code Playgroud)

即使在启用LunarG标准验证层的情况下运行,此方案仍然有效.但是,尽管不正确,但目前通过验证层还有很多东西.所以我的问题是,这样做有效吗?

c++ vulkan

0
推荐指数
1
解决办法
186
查看次数

如何锁定行,并在多个事务中使用锁定?

我有一种情况需要:

  1. 读取行的值.
  2. 如果某列的值为"X",则执行操作A.否则,执行操作B.
  3. 如果我们执行了操作A,请使用操作结果更新列.

操作A不是数据库操作,可能需要一段时间才能运行,并且它不可逆.操作B不是数据库操作,但运行速度非常快.该序列在多个服务器上的多个线程上执行.

目前我们没有锁定,所以偶尔我们会看到动作A被执行多次,而它应该只发生一次.我认为我唯一的解决方案是以某种方式将上面的序列包含在获取锁定步骤和释放锁定步骤中,我不知道该怎么做.

我看到了一个类似的问题,答案是在行中添加"锁定"和"查询时间"列.然而,在那种情况下,OP并不担心经常重新获得锁定.如果每次我想执行序列时必须旋转等待上一次锁定到期,我的服务器性能可能会超出窗口.

我可以在这里使用SQL内置的东西吗?

sql locking race-condition azure-sql-database

0
推荐指数
1
解决办法
38
查看次数