小编Mat*_*att的帖子

使用Find-method时,Entity Framework会抛出异常

我有一个简单的Web应用程序,允许用户上传包含特定数据的2个.csv文件.为了保持数据,我使用了Entity Framework两种不同的数据Import-methods.

第一种进口方法

    public void ImportOne(string path)
    {
        StreamReader sr = new StreamReader(path);

        using (var db = new ContextEv("RndContext"))
        {
            db.Database.ExecuteSqlCommand("DELETE FROM TableA");
            db.Database.ExecuteSqlCommand("DELETE FROM TableB");

            while (!sr.EndOfStream)
            {
                string[] data = sr.ReadLine().Split(';');
                string houseId = data[0];

                    House house = new House()
                    {
                        HouseId = houseId,
                    };

                    House dummy = db.Houses.Find(houseId);

                    if (!dummy.HouseId.Equals(house.HouseId))
                    {
                        db.Houses.Add(house);
                    }
                }
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

此行失败:House dummy = db.Houses.Find(houseId);出现以下异常:

其中一个主键值的类型与实体中定义的类型不匹配.有关详细信息,请参阅内部异常.\ r \nParametername:keyValues

InnerException的ErrorContext:

关键字'AS',第1行,第22列

InnerException的ErrorDescription:

查询语法无效.

好吧,我检查了这个类型是否真的存在问题.但是我没有发现任何错误.

关于它的"有趣"的事情是,我在另一个Import-method中使用相同的Find-method,它没有任何异常!

using …
Run Code Online (Sandbox Code Playgroud)

.net c# linq asp.net-mvc entity-framework

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

更改 Azure 存储模拟器的运行 IP

我正在使用“新的”Azure 存储模拟器命令行版本。在以前的版本中,可以在运行.

我再也找不到同一个文件,并查看了其他配置文件,但到目前为止还没有运气。有谁知道怎么改?

azure azure-storage azure-storage-emulator

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

如何从内存中的 DLL 调试 C# 代码,但磁盘中没有 DLL

有一个 c# 应用程序,它编译存储在 DB 中的 C# 代码,并使用 roslyn 编译器在内存中创建一个 DLL,该 DLL 被加载到内存中,并从以下代码创建该类型的实例

   Activator.CreateInstance(type); // Just creates an instance of the type so that any public method or property can be accessed
Run Code Online (Sandbox Code Playgroud)

将代码放在 DB 中的原因在此处解释起来有点复杂,但需要注意的是,不存在存在 C# 代码的物理文件。

另请注意,DLL 是由应用程序在运行时以发布模式或调试模式创建的,具体取决于 #ifdebug 是否为 true。

现在我们想要的是,如果应用程序在调试模式下运行,我们应该能够调试在运行时创建的 DLL。这里的专家可以帮我指点一下如何实现它吗?由于可以从数据库访问代码,因此如果应用程序在调试模式下运行,我们可以在运行时在某个临时位置创建一个临时文件,但是我们如何让 Visual Studio 知道我们想要将特定的 DLL 链接到这个临时 C# 文件调试的目的。请注意,DLL 位于内存中的某个并发包中,我们也没有创建 PDB 文件

任何指针都会有帮助我们正在使用 Visual studio 2022

c# debugging dll assembly visual-studio

5
推荐指数
2
解决办法
445
查看次数

MSIL源代码的编译器在哪里驻留在.NET Framework中?

我有一个关于.NET Framework的问题:MSIL源代码的编译器在哪里?它是在CLR本身还是在任何其他层?另外,请给我一个非常小(但足够)的.NET Framework插图.

[.NET框架[1]

c# asp.net

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

新的元组语法在C#版本7中不起作用

我已经开始在Visual Studio Enterprise 15 Preview 2中尝试C#7的新功能.我能够运行其他即将推出的功能的代码,如二进制文字,数字分隔符等.但元组初始化的新语法不起作用.

这是我的代码片段:

var latLong = new (double lat, double lng) { lat = 0, lng = 0 };
var result = (5, 20);
var result = (count: 5, sum: 20);
Run Code Online (Sandbox Code Playgroud)

我已经按照博客中提到的所有步骤进行了操作.如果其他人也遇到过此问题,请发布此问题.上面的代码会导致编译失败,如下所示:

1>Program.cs(18,26,18,27): error CS1031: Type expected
1>Program.cs(18,27,18,33): error CS1525: Invalid expression term 'double'
1>Program.cs(18,34,18,37): error CS1003: Syntax error, ',' expected
1>Program.cs(18,39,18,45): error CS1525: Invalid expression term 'double'
1>Program.cs(18,46,18,49): error CS1003: Syntax error, ',' expected
Run Code Online (Sandbox Code Playgroud)

c# visual-studio c#-7.0

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

更改应用程序中所有控件的字体大小(win 表单)

我有一个应用程序需要适应一系列不同的屏幕尺寸(分辨率)。其中大部分工作是我使用表格布局面板完成的。

但某些控件(主要是按钮和标签)的字体太大,文本不适合控件。到目前为止,我已经通过使用更改了一些控件的字体

            if (Screen.PrimaryScreen.Bounds.Width < 1440)
        {
            button_5.Font = new Font("Impact", button_5.Font.Size - 4);
        }
Run Code Online (Sandbox Code Playgroud)

但是,为应用程序中的每个控件添加的文本太多。

有没有办法一次性更改应用程序上所有控件的字体?或者至少是表单上的所有控件?

c# fonts resolution winforms adaptive-design

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

如何复制 Visual Studio 2019 项目?

我有一个 Visual Studio 2019 项目。被要求进行试验性改变。不想改变当前项目。有没有什么方法可以复制项目,这样我就不必从头开始?

搜索了这里以及其他论坛和文档,但找不到解决方案。

copy project visual-studio visual-studio-2019

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

LinqPad 动态 sql 并显示结果

我正在使用 LinqPad 执行一些动态 sql,当我调用 .Dump() 时它返回 IEnumerable。我希望它显示其返回的匿名类型的结果。在 LinqPad 中执行动态 sql 语句并显示结果的任何帮助将不胜感激。

这是我正在尝试做的代码片段:

// Any sql string for example.
var query = "SELECT DISTINCT [CustomerId] FROM Customers Where CustomerId = 2";

var dyn = this.ExecuteQuery<dynamic>(query);

LINQPad.Extensions.Dump(dyn);
Run Code Online (Sandbox Code Playgroud)

c# sql dynamic linqpad

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

收到 Excel 文件内容存在问题的消息

我目前正在使用 OpenXml 手动构建 Excel 文件。我正在添加工作表,但是遇到了一个问题。我有一个循环添加每个工作表的名称,但是一旦它运行并且我尝试打开该文件,我会收到以下消息:

“我们发现‘FileName.xlsx’中的某些内容存在问题。您希望我们尽力恢复吗?如果您信任此工作簿的来源,请单击“是”。”

我认为问题可能是由于我使用字符串变量添加了每个工作表的名称。当我把它拿出来并添加其他东西时,它就起作用了。下面是我的代码,我在其中循环并添加我的工作表。

//Technology Areas
foreach (DataRow dr in techAreaDS.Rows)
{
     var data = dr["TechAreaName"].ToString().Split('-');
     var techArea = data[2].TrimStart();

     var techAreaSheet = new Sheet { Id = workbookPart.GetIdOfPart(worksheetPart), 
                                     SheetId = sheetId, Name = techArea };
     sheets.Append(techAreaSheet);
     sheetId++;
}
Run Code Online (Sandbox Code Playgroud)

我看到人们提到这是一个具有可以转换为字符串的字符串的单元格的问题,但在这种情况下,该字符串将始终是一个字符串。任何帮助,将不胜感激。

编辑:我已经解决了这个问题。问题是“名称”属性的最大长度为 31。我的其中一项的长度为 42,因此出现错误。我确实找到了一组很酷的代码来验证我的 OpenXml。 关联

更新:奇怪的是,有人认为这个问题是关于寻找一些代码来帮助验证我正在做的事情。这不是......问题很清楚:为什么我在尝试命名工作表时收到错误。我并没有要求验证码,尽管我找到了一些。

我确实要求,如果您想提供帮助,请阅读问题而不是假设我在问什么,如果您不知道我希望回答什么,请询问...

c# rendering openxml xlsx openxml-sdk

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

如何在 C# 中的三元运算符中使用await?

SoftUpdateAsync使用此代码,对and的调用UpdateAsync似乎没有等待,我收到了死锁事务的错误。

_ = await _tabRepository.IsReferencedFromAnotherTableAsync(entity.Id)
    ? _tabRepository.SoftUpdateAsync(entity)
    : _tabRepository.UpdateAsync(entity);
Run Code Online (Sandbox Code Playgroud)

该函数IsReferencedFromAnotherTableAsync返回一个布尔值,UpdateAsync并且SoftUpdateAsync返回一个任务。

但是,如果我将代码写为

if (await _tabRepository.IsReferencedFromAnotherTableAsync(entity.Id))
    await _tabRepository.SoftUpdateAsync(entity);
else
    await _tabRepository.UpdateAsync(entity);
Run Code Online (Sandbox Code Playgroud)

一切似乎都正常工作。

我可以使用三元运算符代替 if then else 吗?

我尝试过:

_ = await _countdownRepository.IsReferencedFromAnotherTableAsync(entity.Id)
    ? await _countdownRepository.SoftUpdateAsync(entity)
    : await _countdownRepository.UpdateAsync(entity);
Run Code Online (Sandbox Code Playgroud)

await _countdownRepository.IsReferencedFromAnotherTableAsync(entity.Id)
    ? await _countdownRepository.SoftUpdateAsync(entity)
    : await _countdownRepository.UpdateAsync(entity);
Run Code Online (Sandbox Code Playgroud)

两者都会导致错误:

第一个是“不能对 void 类型的值进行赋值”,第二个是“只有赋值、调用、递增、递减和新对象表达式可以用作语句”

c# conditional-operator async-await

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