C# 基于Oracle的实体连续失败,强制转换C无效#
我目前正在使用EntityFramework4.3来映射遗留oracle数据库。在我看来,所有的数据类型都与Oracle数据类型兼容,但是它总是抛出一个C# 基于Oracle的实体连续失败,强制转换C无效#,c#,entity-framework,entity-framework-4.3,C#,Entity Framework,Entity Framework 4.3,我目前正在使用EntityFramework4.3来映射遗留oracle数据库。在我看来,所有的数据类型都与Oracle数据类型兼容,但是它总是抛出一个targetingException,内部异常为InvalidCastException。 所讨论的表使用复合键,我不确定这是否与我接收异常的原因直接相关。 我目前的代码如下 配置类: class NoteConfig : EntityTypeConfiguration<Note> { public NoteConfig()
targetingException
,内部异常为InvalidCastException
。
所讨论的表使用复合键,我不确定这是否与我接收异常的原因直接相关。
我目前的代码如下
配置类:
class NoteConfig : EntityTypeConfiguration<Note>
{
public NoteConfig()
{
Property(m => m.DateChanged).HasColumnName("DATE_CHANGED");
Property(m => m.ObjectId).HasColumnName("OBJECT_ID");
Property(m => m.ObjectType).HasColumnName("OBJECT_TYPE");
Property(m => m.Subject).HasColumnName("SUBJECT");
Property(m => m.Text).HasColumnName("TEXT");
Property(m => m.EnteredBy).HasColumnName("ENTERED_BY");
Property(m => m.LineNo).HasColumnName("LINE_NO");
Property(m => m.LanguageId).HasColumnName("LANGUAGE_ID");
//composite key mapping
HasKey(m =>
new {
m.ObjectType,
m.ObjectId,
m.LanguageId,
m.Subject,
m.LineNo,
});
ToTable("TSW_INT_NOTES", Settings.Default.DbSchema);
}
}
public class Note
{
// comp key (languageid, objectid, lineno, object type, subject
public string Subject { get; set; }
public string Text { get; set; }
public string ObjectType { get; set; }
public string ObjectId { get; set; }
public DateTime DateChanged { get; set; }
public string EnteredBy { get; set; }
public string LineNo { get; set; }
public int LanguageId { get; set; }
}
表格布局:
class NoteConfig : EntityTypeConfiguration<Note>
{
public NoteConfig()
{
Property(m => m.DateChanged).HasColumnName("DATE_CHANGED");
Property(m => m.ObjectId).HasColumnName("OBJECT_ID");
Property(m => m.ObjectType).HasColumnName("OBJECT_TYPE");
Property(m => m.Subject).HasColumnName("SUBJECT");
Property(m => m.Text).HasColumnName("TEXT");
Property(m => m.EnteredBy).HasColumnName("ENTERED_BY");
Property(m => m.LineNo).HasColumnName("LINE_NO");
Property(m => m.LanguageId).HasColumnName("LANGUAGE_ID");
//composite key mapping
HasKey(m =>
new {
m.ObjectType,
m.ObjectId,
m.LanguageId,
m.Subject,
m.LineNo,
});
ToTable("TSW_INT_NOTES", Settings.Default.DbSchema);
}
}
public class Note
{
// comp key (languageid, objectid, lineno, object type, subject
public string Subject { get; set; }
public string Text { get; set; }
public string ObjectType { get; set; }
public string ObjectId { get; set; }
public DateTime DateChanged { get; set; }
public string EnteredBy { get; set; }
public string LineNo { get; set; }
public int LanguageId { get; set; }
}
断点输出:
class NoteConfig : EntityTypeConfiguration<Note>
{
public NoteConfig()
{
Property(m => m.DateChanged).HasColumnName("DATE_CHANGED");
Property(m => m.ObjectId).HasColumnName("OBJECT_ID");
Property(m => m.ObjectType).HasColumnName("OBJECT_TYPE");
Property(m => m.Subject).HasColumnName("SUBJECT");
Property(m => m.Text).HasColumnName("TEXT");
Property(m => m.EnteredBy).HasColumnName("ENTERED_BY");
Property(m => m.LineNo).HasColumnName("LINE_NO");
Property(m => m.LanguageId).HasColumnName("LANGUAGE_ID");
//composite key mapping
HasKey(m =>
new {
m.ObjectType,
m.ObjectId,
m.LanguageId,
m.Subject,
m.LineNo,
});
ToTable("TSW_INT_NOTES", Settings.Default.DbSchema);
}
}
public class Note
{
// comp key (languageid, objectid, lineno, object type, subject
public string Subject { get; set; }
public string Text { get; set; }
public string ObjectType { get; set; }
public string ObjectId { get; set; }
public DateTime DateChanged { get; set; }
public string EnteredBy { get; set; }
public string LineNo { get; set; }
public int LanguageId { get; set; }
}
这是一个数字数据类型问题,但它位于lineno字段上,如果您试图在小数位数设置为<0时映射数字数据类型,则ef会引发异常
并且在c中定义为int时不会自动截断十进制值,就像在c中定义浮点值或双精度值一样。我相信很可能是日期更改造成了问题。,及。,所以
LanguageId
也会引起问题。这些理论的奇怪之处在于,我的其他实体可以很好地处理这些类型,我还尝试将它们直接映射到具有相同结果的字符串类型。所以请注意,josh这是使用实体框架和oracles EF4访问组件,通常由它们的EF自动处理数据源,而不是使用那些帖子引用的纯字符串sql操作,我通常非常擅长记住这一点,这一点我一定已经忘记了