小编dri*_*iAn的帖子

何时不使用实体框架

我一直在玩EF,看看它能处理什么.此外,许多文章和帖子解释了可以使用EF的各种场景,但是如果以某种方式错过"con"方面.现在我的问题是,在什么样的情况下我应该远离实体框架

如果你在这个领域有一些经验,请告诉我哪些场景不适合EF.告诉我你经历过的一些缺点,你会选择不同的技术.

.net c# architecture entity-framework

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

是否有SVN DIFF命令的元数据排除过滤器?

我使用SVN作为源控制系统,我想知道如何比较目录而忽略任何元数据差异.有没有办法告诉svn diff我只比较实际内容并忽略任何元数据?

我的意思是像SVN属性等元数据,它们不会影响文件内容.假设文件X在分支B中具有与trunk T相比的附加属性.不幸的是,即使文件X的实际内容相同,它也将显示在'svn diff TB'中.

我寻找这样的东西:

svn diff https://example.org/tags/v1 https://example.org/tags/v2 -x -ignore-metadata --summarize
Run Code Online (Sandbox Code Playgroud)

更新:我通过直接在文件系统上进行差异而不是使用SVN工具来解决这个问题.请看下面我自己的答案......

svn version-control diff metadata properties

25
推荐指数
5
解决办法
1万
查看次数

实体框架:如何正确处理由于SQL约束而发生的异常

我使用Entity Framework来访问我的SQL数据.我在数据库模式中有一些约束,我想知道如何处理由这些约束引起的异常.

例如,在两个用户尝试同时向DB添加(几乎)相同的实体的情况下,我得到以下异常.

System.Data.UpdateException
"An error occurred while updating the entries. See the InnerException for details."

(inner exception) System.Data.SqlClient.SqlException
"Violation of UNIQUE KEY constraint 'Unique_GiftId'. Cannot insert duplicate key in object 'dbo.Donations'.\r\nThe statement has been terminated."
Run Code Online (Sandbox Code Playgroud)

如何正确捕获此特定异常?

脏的解决方案:

    catch (UpdateException ex)
    {
        SqlException innerException = ex.InnerException as SqlException;
        if (innerException != null && innerException.Message.StartsWith("Violation of UNIQUE KEY constraint 'Unique_GiftId'"))
        {
            // handle exception here..
        }
        else
        {
            throw;
        }
    }
Run Code Online (Sandbox Code Playgroud)

现在虽然这种方法有效,但它有一些缺点:

  • 无类型安全:代码取决于包含唯一列名称的异常消息.
  • 对SqlCLient类的依赖(破坏抽象)

你知道更好的解决方案吗?感谢所有反馈..

注意:我不想在应用程序层中手动编写约束,我想将它们放在数据库中.

sql sql-server entity-framework constraints unique-constraint

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

C#design:为什么抽象方法需要new/override,虚拟方法不需要?

为什么抽象方法需要new/override,虚拟方法不需要?

样本1:

abstract class ShapesClass
{
    abstract public int Area(); // abstract!
}

class Square : ShapesClass
{
    int x, y;

    public int Area() // Error: missing 'override' or 'new'
    {
        return x * y;
    }
}
Run Code Online (Sandbox Code Playgroud)

编译器将显示此错误: 要使当前成员覆盖该实现,请添加override关键字.否则添加新关键字

样本2:

class ShapesClass
{
    virtual public int Area() { return 0; } // it is virtual now!
}

class Square : ShapesClass
{
    int x, y;

    public int Area() // no explicit 'override' or 'new' required
    {
        return x * y; …
Run Code Online (Sandbox Code Playgroud)

c# virtual language-design abstract-methods

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

.NET中的DAL和BLL

有此DAL/BLL设计建议为ASP.NET(2.0)应用由微软.我知道一些替代方案,我在这里已经阅读了相关问题.但是我想知道这个提议的解决方案现在是否值得实施,你知道的是否有一个特定的缺点?

我想开发DAL/BLL组件以供公司内部使用,从各种应用程序和脚本访问客户和员工数据等.然而,在我开始构建这些东西之前,我想确保这个解决方案是"好的".例如,BLL传递数据表而不是封装任何东西,您没有包含逻辑的隔离业务对象.它基本上只是一个愚蠢的层,可以简化CRUD操作并允许控件的数据绑定.

在这个领域有经验的人能否指出我对这种方法的赞成和反对意见?

c# asp.net datatable data-access-layer bll

10
推荐指数
2
解决办法
7770
查看次数

匹配数百万人:kd 树还是局部敏感哈希?

我正在寻找一种高性能算法,根据以下数据结构按位置性别年龄匹配大量人员:

  • 经度(表示该人的位置)
  • 纬度(表示人的位置)
  • 性别(表示人的性别)
  • 出生日期(表示该人的出生日期)
  • LookForGender(表示该人正在寻找的性别)
  • LookForMinAge(表示该人正在寻找的最低年龄)
  • LookForMaxAge(表示该人正在寻找的最大年龄)
  • LookForRadius(表示该人正在寻找的最大距离)
  • 已处理(表示此人已经处理了哪些其他人)

对于任何人 P,算法应返回适用的候选人 C:

  • C 的性别必须相同 P.LookingForGender
  • P 的性别必须相同 C.LookingForGender
  • C 的出生日期必须介于 P.LookingForMinAge 和 P.LookingForMaxAge 之间
  • P 的出生日期必须介于 C.LookingForMinAge 和 C.LookingForMaxAge 之间
  • P 和 C 之间的纬度/经度距离必须小于或等于 P.LookingForRadius
  • P 和 C 之间的纬度/经度距离必须小于或等于 C.LookingForRadius
  • 加工后的P不得含有C

该算法应按距离(纬度/经度)顺序返回前 100 个候选 C。该算法应该针对搜索和更新进行优化,因为人们可能经常改变他们的位置。

我目前的想法是,kd 树可能比局部敏感哈希更适合这些需求,我应该朝这个方向发展。

您对我有什么建议?我应该寻找什么?您看到什么风险?

谢谢!

更新

  • 我是否愿意牺牲空间复杂度来获得更好的时间复杂度?是的,我更愿意牺牲空间复杂性。然而,我更喜欢有一个我真正理解并且可以维护的 O(log n) 解决方案,而不是一个我无法掌握的 O(1) 解决方案:)
  • 数据是否适合主存?不,不是的。数据将分布在分布式文档数据库(Azure Cosmos DB SQL API)的不同节点上。
  • 您想要精确的结果还是近似的结果?近似结果是可以的,但是应该精确过滤年龄/性别。
  • 在算法中添加了“已处理”,抱歉错过了!
  • 人们多久改变一次位置?用户每当启动应用程序并寻找候选人时都会改变他们的位置。因此,每日活跃用户每天会更改一次或多次位置。然而,位置变化可能很小,只有几公里。在 …

algorithm kdtree nearest-neighbor locality-sensitive-hash azure-cosmosdb

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

通过方法接口表达C++参数的用法

是否有一种通用的方式来表达C++中的参数用法?我想暗中告诉我的班级的消费者他们传递的参数将如何被类使用.

例子:

  1. 我拥有你的论点(将清理它)
  2. 我将在我的一生中提到你的论点(所以你不应该在我活着的时候删除它)
  3. 我将仅在构造期间使用您的参数,并且不会持有参考

是否有一种常见的方式来简单地使用方法声明来表达这些内容?我认为在第一种情况下,std :: auto_ptr会有意义.在第二种情况下,我通常会使用一个指针来避免有人从堆栈中传递一个值,这会使我的引用很快失效,或者是shared_ptr.在第三种情况下,我参考允许来自堆栈的值.

你怎么处理这个?还有必要在这里依赖智能指针,或者只是通过某种方式使用裸引用和指针来表达这些事情吗?

c++ arguments interface

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

调试MS SQL存储过程

我有一个问题让存储过程调试在Visual Studio 2008的工作:当我开始调试,我在输出窗口获得这些成功消息,但是实际的存储过程窗口不显示.

Auto-attach to process '[1640] [SQL] stagsql' on machine 'stagsql' succeeded.
The thread 'stagsql [67]' (0xf80) has exited with code 0 (0x0).
The thread 'stagsql [67]' (0xf80) has exited with code 0 (0x0).
The thread 'stagsql [69]' (0x908) has exited with code 0 (0x0).
The thread 'stagsql [69]' (0x908) has exited with code 0 (0x0).
The thread 'stagsql [69]' (0x908) has exited with code 0 (0x0).
The thread 'stagsql [69]' (0x908) has exited with code 0 (0x0).
Running …
Run Code Online (Sandbox Code Playgroud)

sql t-sql debugging stored-procedures visual-studio

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

Azure Cosmos DB (SQL API) 中非常简单的查询的高请求费用

在 Azure Cosmos DB (SQL API) 中,以下查询收费9356.66 RU

SELECT * FROM Core c WHERE c.id = @id -- @id is a GUID
Run Code Online (Sandbox Code Playgroud)

相比之下,以下更复杂的查询仅收费6.84 RU

SELECT TOP 10 * FROM Core c WHERE c.type = "Agent"
Run Code Online (Sandbox Code Playgroud)

这两个示例中的文档都非常小,但具有一些属性。此外,文档集合不使用任何自定义索引策略。该集合包含 105685 份文档。

对我来说,这听起来好像“id”字段上没有正常工作的索引。

这怎么可能以及如何解决?

更新:

  • 如果没有 TOP 关键字,第二个查询将收取 3516.35 RU 并返回 100000 条记录。
  • 分区键是“/partition”,其值为0或1(均匀分布)。

database-performance azure-cosmosdb azure-cosmosdb-sqlapi

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

如何在 Room 持久化库中捕获未处理的异常

背景:

我在我的 Android (Java) 项目中使用 Room 持久性库来支持数据的本地缓存。Room 在查询或保存数据时在专用线程上运行。

问题:

如果在 Room 管理的这些线程之一中抛出异常,那么整个应用程序就会崩溃。这可能发生在数据不一致的情况下,例如数据与当前模式不匹配。这是非常成问题的。我宁愿自己处理此类异常并擦除本地数据库中的所有数据 - 这比让用户使用完全损坏且无法修复的应用程序要好。

示例异常:

2020-01-22 12:45:08.252 9159-11043/com.xyz E/AndroidRuntime: FATAL EXCEPTION: arch_disk_io_1
    Process: com.xyz, PID: 9159
    java.lang.RuntimeException: Exception while computing database live data.
        at androidx.room.RoomTrackingLiveData$1.run(RoomTrackingLiveData.java:92)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
        at java.lang.Thread.run(Thread.java:764)
     Caused by: java.lang.RuntimeException: com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "primary" (class com.xyz.model.remotedatasource.sampleApi.entities.ProfileImage), not marked as ignorable (2 known properties: "isPrimary", "url"])
        at [Source: (byte[])":)
    ... -1, column: 402] (through reference chain: com.xyz.model.remotedatasource.sampleApi.entities.Candidate["profileImages"]->java.util.ArrayList[0]->com.xyz.model.remotedatasource.sampleApi.entities.ProfileImage["primary"])
        at com.xyz.model.localdatasource.Converters.deserialize(Converters.java:113)
        at com.xyz.model.localdatasource.Converters.toCandidate(Converters.java:73)
        at com.xyz.model.localdatasource.LocalDao_Impl$4.call(LocalDao_Impl.java:270)
        at com.xyz.model.localdatasource.LocalDao_Impl$4.call(LocalDao_Impl.java:217)
        at androidx.room.RoomTrackingLiveData$1.run(RoomTrackingLiveData.java:90) …
Run Code Online (Sandbox Code Playgroud)

java android android-room

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