我试图通过代码优先的方法在实体框架6中创建一个数据库。我知道错误:
索引'PK_surveyor.CONDITIONS‘行长度超过最大允许长度'8060’字节。无法创建约束或索引。请参阅先前的错误。
类条件的定义如下:
[Table("surveyor.CONDITIONS")]
public partial class CONDITION : ISurveyComponent
{
[Key]
[Column(Order = 0)]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public long ID { get; set; }
[Column(Order = 1, TypeName = "char")]
public string NAME { get; set; }
[Column(Order = 2)]
[DataType(DataType.DateTime)]
public DateTime LASTUPDATED { get; set; }
[Column(Order = 3)]
public int ENABLED { get; set; }
public enum ActionTypes { JumpOnPass = 0, SetFromResponse = 1, SetResponse = 2 };
[Column(Order = 4)]
public int ACTIONTYPE { get; set; }
[NotMapped]
public ActionTypes Action
{
get
{
return (ActionTypes)ACTIONTYPE;
}
}
public enum TestTypes { AlwaysFail=0, AlwaysPass=1,PassIfEqual=11,PassIfNotEqual=12
,PassIfLessThan=13,PassIfLessThanOrEqual=14,PassIfGreaterThan=15,PassIfGreaterThanOrEqual=16
,PassIfEmpty=20,PassIfDisabled=30};
[Column(Order = 5)]
public int TESTTYPE { get; set; }
[NotMapped]
public TestTypes Test
{
get
{
return (TestTypes)TESTTYPE;
}
}
public enum LeftOperandTypes {None=-1, Response=0, Comment=1, Step=2, Club=3, Province=4, ClubPrize=5};
public int? LEFTTYPE { get; set; }
[NotMapped]
public LeftOperandTypes LeftOperandType
{
get
{
if(LEFTTYPE.HasValue)
return (LeftOperandTypes)LEFTTYPE;
return LeftOperandTypes.None;
}
}
public enum RightOperandTypes {None=-1, Response=0, AbsoluteValue=1};
public int? RIGHTTYPE { get; set; }
[NotMapped]
public RightOperandTypes RightOperandType
{
get
{
if(RIGHTTYPE.HasValue)
return (RightOperandTypes)RIGHTTYPE;
return RightOperandTypes.None;
}
}
public long? PARAMID1 { get; set; }
public long? PARAMID2 { get; set; }
public long? PARAMID3 { get; set; }
public long? PARAMID4 { get; set; }
public int? PARAMINT1 { get; set; }
public int? PARAMINT2 { get; set; }
public int? PARAMINT3 { get; set; }
}
这将产生一个大约592字节+头长的表行。我可以看到null处理添加了几个字节,但是为什么EF试图创建大于8060字节的行呢?
另外,我得到的例外要求我“查看以前的错误”。对在哪里看到这些有什么想法吗?在例外情况下,与它们没有任何联系。
发布于 2017-04-04 06:26:35
检查您的insert (HttpPost)
逻辑,该错误是,而不是与整个行大小相关的,而是单字段大小。一列可容纳的最大数据大小为8000字节。尝试查看试图插入超过此数字的一个或多个字段的任何尝试插入。例如,超过8000个字符的Varchar
字符串或Nvarchar
字符串有超过4000个字符。
您还可以检查previous
错误消息,它通常显示在第一个错误消息的下面。
发布于 2017-04-17 07:09:37
答案是,Typename = "char“正在使EF陷入混乱,并导致错误。错误信息是假的。
发布于 2020-11-12 03:41:40
我刚刚收到了同样的错误信息。在我的示例中,连接字符串的名称已在应用程序配置文件中更改,但没有以DbContext构造函数的名称(参数nameOrConnectionString)更改,因此EF试图使用不存在的连接字符串。
https://stackoverflow.com/questions/43209798
复制相似问题