小编Sim*_*mon的帖子

尝试将FK设置为​​null时,引用完整性约束违规

我正在尝试更新EF6中的实体.我已经读过,如果我想更改一个ForeignKey属性,我必须确保导航属性是正确的,或者将其设置为null.

我已将set设置为null方法,但我仍然收到参照完整性约束异常:

A referential integrity constraint violation occurred: The property value(s) of 'Contact.idContact' on one end of a relationship do not match the property value(s) of 'Entity.id_EntityContactInfo' on the other end.
Run Code Online (Sandbox Code Playgroud)

但你可以在调试器中看到,Entity.Contact为null,所以我相信这不应该抛出.

在此输入图像描述

有任何想法吗?

编辑

这是实体的更新方式:

public T CommitUpdate<T>(T obj) where T : class
    {
        _DbContext.Set<T>().Attach(obj);
        _DbContext.Entry(obj).State = EntityState.Modified;
        _DbContext.Commit();
        return obj;
    }
Run Code Online (Sandbox Code Playgroud)

c# referential-integrity entity-framework

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

我应该在Windows窗体项目中使用数据绑定吗?

我正在使用Winforms开发一个应用程序,并且使用了一个数据绑定我的网格的路径BindingSource.我的问题是:

这是最好的方法吗?我应该手动填充单元格而不是让它BindingSource为我做吗?它会导致进一步的问题吗?如果在任何情况下数据绑定会产生问题,那将是有用的.

我的一位同事发誓黑色和蓝色不使用数据绑定.我真的不相信他说的话,所以任何利弊都是有价值的.

在连接到单个数据库和可编辑DataGrid的多用户应用程序的情况下,如何解决更新数据的并发问题?

c# data-binding winforms

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

使用字段名而不是索引访问dataSet字段的性能

性能可以忽略不计吗?

例如,

myQuery.FieldbyName("MyField").AsString;
myQuery.Fields[0].AsString;
Run Code Online (Sandbox Code Playgroud)

案例:具有相当数量字段的表,例如> 50个字段

访问大型结果集,例如> 100,000行

字段名称的可读性好处是否值得降低性能?

delphi performance dataset

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

Delphi - 在rect的中心绘制文本多行

在Delphi中,我希望在TRect中绘制文本.我希望有以下功能:

  1. 在TRect中垂直居中绘制文本
  2. 在TRect中水平居中绘制文本
  3. 如果有超过1行文本的空间(使用TRect的高度),则绘制文本多行
  4. 如果文本不适合TRect(在单行或多行上),则将省略号附加到文本.

我可以看到Windows.DrawText()函数几乎涵盖了这个功能,但是在写文本时,多行和垂直居中是互斥的.

我想知道这个功能是否内置于Windows(2000+)?如果没有,有没有办法在不编写自己的功能的情况下这样做?

delphi text

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

MySQL - 在一条记录中显示记录对

我在一个表中有以下数据:

Time, Type, Kilometers
12:00, 1, 0.1
12:30, 2, 0.2
14:00, 1, 0.4
15:00, 2, 1.0
16:00, 1, 1.2
16:30, 2, 1.5
16:45, 1, 2.0
Run Code Online (Sandbox Code Playgroud)

此数据使用DateTime字段按时间顺序排序.我想将这些记录'对'显示为1行,如下所示:

StartTime, Type1Km, Type2Km
12:00, 0.1, 0.2
14:00, 0.4, 1.0
16:00, 1.2, 1.5
16:45, 2.0, NULL
Run Code Online (Sandbox Code Playgroud)

有几点需要注意:如果没有Type1启动,则在结果表的Type1Km字段中显示NULL.同样,如果没有Type2结束,则在记录的Type2Km字段中显示NULL.

我怎么能这样做?

mysql sql join

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

.NET获取所有用户都可访问的本地临时目录

正如标题所述,我如何获得所有用户都可以访问的临时目录.

Path.GetTempPath() 返回当前用户的临时目录.

.net directory

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

MySQL加入/比较DATETIME列(<5.6.4和> 5.6.4)

假设我有两个这样的表:

Events
ID (PK int autoInc), Time (datetime), Caption (varchar)

Position
ID (PK int autoinc), Time (datetime), Easting (float), Northing (float)
Run Code Online (Sandbox Code Playgroud)

例如,如果我使用该Time字段作为我的加入标准,列出所有事件及其位置是否安全?即:

SELECT E.*,P.* FROM Events E JOIN Position P ON E.Time = P.Time
Run Code Online (Sandbox Code Playgroud)

或者,甚至只是简单地比较日期时间值(考虑到参数化值可能包含小数秒部分 - MySQL一直接受的部分),例如

SELECT E.* FROM Events E WHERE E.Time = @Time
Run Code Online (Sandbox Code Playgroud)

我理解MySQL(版本5.6.4之前)只存储datetime字段WITHOUT毫秒.所以我认为这个查询功能正常.但是从版本5.6.4开始,我已经读过MySQL现在可以使用datetime字段存储毫秒.

假设使用诸如函数插入日期时间值NOW(),则截断毫秒(<5.6.4),我假设允许上述查询起作用.但是,对于5.6.4及更高版本,这可能无法正常工作.我,并且只会对第二准确性感兴趣.

如果有人能回答以下问题,将不胜感激:

  1. 一般来说,MySQL如何将日期时间字段相互比较(考虑上面的查询).
  2. 以上查询是否正常,是否在时间字段中使用索引?(MySQL <5.6.4)
  3. 有没有办法排除毫秒?即插入和条件连接/选择等?(MySQL> 5.6.4)
  4. 上面的联接查询是否有效?(MySQL> 5.6.4)

编辑

我知道我可以投出日期时间,感谢那些回答,但我正在尝试解决问题的根源(存储类型/定义已被更改的事实),我不想在我的使用函数查询.这否定了我优化应用索引等查询的所有工作,更不用说重写我的所有查询了.

EDIT2

任何人都可以建议不DATETIME使用第二准确度加入某个领域的原因吗?

mysql datetime time-precision

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

实体框架 - 包含/参考/集合

我想知道为什么有单独的方法来填充导航属性.

如果我在整套工作,我可以打电话Include给财产或集合.

但是,如果我处理单个实体,则根据项目是collection(Collection)还是单引用(Reference),有两种不同的方法可以调用.

有没有办法解决这个问题 - 这使得事情变得比我想象的更复杂.谁能解释为什么在设计EF时决定了这一点?

编辑

进一步研究,问题更深入.我试图做的是创建一种在单个实体上加载集合/导航属性的通用方法.使用Include可以在整个集合上轻松完成.但该方法的签名ReferenceCollection略有不同.

没关系,将不得不在我的应用程序周围分散这些调用.

例如

dbSet<T>().Include(e => e.Property).Include(e => e.Collection).Include(e => e.Collection.Property) 
Run Code Online (Sandbox Code Playgroud)

一切似乎都有效.

但是,对单个实体的调用是不同的:

context.Entry(entity).Reference(e => e.Property).Load();
context.Entry(entity).Reference(e => e.Property.Select(e => e.SubProperty)).Load();
context.Entry(entity).Collection(e => e.Collection).Load();
Run Code Online (Sandbox Code Playgroud)

c# entity-framework navigation-properties

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

任务取消异常(ThrowForNonSuccess)

这是这个问题的延续: 多任务延续

我在答案中更改了我的代码,但是现在我在TaskCancelledExceptions尝试运行任务时收到了.

public virtual async Task RunAsync(TaskWithProgress task)
{
    Show();
    TaskIsRunning();
    await SetCompletedHandler(TaskComplete());
    await SetCancelledHandler(TaskCancelled())
    await SetFaultedHandler(TaskFaulted());
    await task;
    Close();
}
Run Code Online (Sandbox Code Playgroud)

但是以下代码没有.我有点卡住原因.

public virtual Task RunAsync(TaskWithProgress task)
{
    Show();
    TaskIsRunning();
    SetCompletedHandler(TaskComplete());
    SetCancelledHandler(TaskCancelled())
    SetFaultedHandler(TaskFaulted());
    return task;
}
Run Code Online (Sandbox Code Playgroud)

调用代码基本上涉及以下内容:

await progressDialog.RunAsync(task);
Run Code Online (Sandbox Code Playgroud)

编辑:

我没有取消cancellationtoken任何地方,所以我不明白为什么这会抛出异常.

三个SetXXXHandler()方法基本上执行以下具有不同延续状态的代码:

task.ContinueWith(_ => action(), CancellationToken.None, TaskContinuationOptions.OnlyOnCanceled, this.Scheduler);
Run Code Online (Sandbox Code Playgroud)

堆栈跟踪在这里:

   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.GetResult()
   at FugroDXExt.frmBaseProgressAsync.<RunAsync>d__7.MoveNext() in d:\C#\FugroDXExt\trunk\frmBaseProgressAsync.cs:line 92
--- End of stack trace from previous location where exception was thrown --- …
Run Code Online (Sandbox Code Playgroud)

.net c# asynchronous task-parallel-library async-await

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

如何生成任务<任务>以解包

有人可以解释这两个陈述之间的区别:

Task<Task> bTask = backup.BackupCurrentDatabaseAsync()
    .ContinueWith(_ => CompressArchiveAsync());
//unwrap the tasks to produce one entire task
Task t = bTask.Unwrap();
Run Code Online (Sandbox Code Playgroud)

VS

Task<Task> bTask = backup.BackupCurrentDatabaseAsync()
    .ContinueWith(_ => 
{
    CompressArchiveAsync();
});
//unwrap the tasks to produce one entire task
Task t = bTask.Unwrap();
Run Code Online (Sandbox Code Playgroud)

该方法ExtractArchiveAsync(),BackupCurrentDatabaseAsync(),RestoreDatabaseAsync()全部返回Task.

这里,第一个Continuation返回a Task<Task>.然后我可以Unwrap()将此任务放在结果(内部)任务上.

第二个版本不编译.这里唯一不同的是周围的牙箍CompressArchiveAsync().

我试图访问结果(内部)Task来检查Task.Status.如果我使用第二种方法,Task.Status将报告BackupCurrentDatabaseAsync()任务的结果.

.net c# task-parallel-library async-await

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