gpt4 book ai didi

c# - 无法使用 EntityFramework.IBM.DB2 连接到 Informix

转载 作者:行者123 更新时间:2023-11-30 16:49:36 25 4
gpt4 key购买 nike

我在使用 EntityFramework.IBM.DB2 (v6.0.3) 包从 .Net 4.5.2 应用程序连接到 Informix 数据库时遇到问题。当我尝试查询数据库时,我不断收到以下错误:

System.NotSupportedException : There is no store type corresponding to the EDM type 'Edm.String' of primitive type 'String'.

抛出错误的行是:

var existing = db
.MyEntities
.FirstOrDefault(e => e.IdB == myId);

实体本身:

public class MyEntity
{
public long IdA { get; set; }

public long IdB { get; set; }

public string NameA { get; set; }

public string NameB { get; set; }

public ICollection<OtherEntity> OtherEntities { get; set; }
}

以及用于创建表的脚本:

create table myentity (
idA BIGINT not null,
idB BIGINT not null,
nameA NVARCHAR(200) not null,
nameB NVARCHAR(200) not null
)
extent size 32 next size 32
lock mode page;

alter table myentity add constraint primary key
(idB)
constraint pk_myentity;

表格配置:

public class MyEntityConfig : EntityTypeConfiguration<MyEntity>
{
public EventTypeConfig()
{
ToTable("MyEntity");
HasKey(u => u.IdB);
Property(u => u.IdB).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
Property(s => s.IdA).IsRequired();
Property(s => s.NameA).IsRequired().HasMaxLength(200);
Property(s => s.NameB).IsRequired().HasMaxLength(200);

HasOptional(e => e.OtherEntities);
HasMany(e => e.OtherEntities);
}
}

当我运行 testconn40 时,我得到了测试通过,所以我认为这不是连接到数据库的问题。我有另一个项目使用非常相似的设置,所以我不知道出了什么问题。

非常感谢任何人可以就此特定错误提供的任何帮助或信息。

最佳答案

此错误是由于 .Net 类型如何映射到数据库类型造成的。

我的一个数据库表中有一个类型为 LVARCHAR(32000) 的字段,而我实体上的相应字段是 string。我将数据库中的字段更新为 NCHAR(32000) 并将以下内容添加到我的实体配置类中:

Property(s => s.StringProp).HasMaxLength(32000).IsRequired();

一旦我进行了这些更改,错误就消失了。

我遇到的另一个奇怪的错误是:

System.NotSupportedException : There is no store type corresponding to the EDM type 'Edm.Guid' of primitive type 'Guid'.

Informix 似乎不支持Guid 类型;我在插入和检索时使用了 VARCHAR(36) 并在 Guid 和字符串之间进行了映射,所以这个错误非常奇怪。事实证明这取决于我如何使用 LINQ 进行查询。

这一行抛出错误:

var dbEntity = dbContext
.MyEntities
.FirstOrDefault(e => e.Id == myGuid.ToString());

哪里可以正常工作:

var id = myGuid.ToString();

var dbEntity = dbContext
.MyEntities
.FirstOrDefault(e => e.Id == id);

基本上,我发现当您尝试使用 EntityFramework.IBM.DB2 做任何事情时,您必须尽可能保持一切简单明了,否则您将继续遇到神秘的问题在网上找到很少或没有支持的错误。

希望这对以后的人有帮助。

关于c# - 无法使用 EntityFramework.IBM.DB2 连接到 Informix,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36414201/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com