我正在尝试从代码优先方法在Entity Framework 6中创建数据库。我收到错误:
索引'PK_surveyor.CONDITIONS'行长度超过'8060'字节的最大允许长度。 无法创建约束或索引。查看以前的错误。
类CONDITION定义如下:
[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字节的行?
另外我得到的例外是“查看以前的错误”。关于在哪里看到这些的任何想法?在例外中没有与他们的链接。
答案 0 :(得分:0)
检查您的insert (HttpPost)
逻辑,错误不与整个行大小 BUT 单字段大小相关。一列可容纳的最大数据大小为8000字节。尝试查看试图插入超过此数字的一个或多个字段的任何尝试插入。例如,包含超过8000个字符或Varchar
字符串的Nvarchar
字符串的字符数超过4000个。
您还可以查看previous
错误消息,该消息通常显示在第一个消息的下方。
答案 1 :(得分:0)
答案是Typename =“char”将EF引入tizzy并导致错误。错误信息是虚假的。
答案 2 :(得分:0)
我刚刚收到了相同的错误消息。就我而言,连接字符串的名称已在应用程序配置文件中更改,但未更改DbContext构造函数的名称(参数 nameOrConnectionString ),因此EF尝试使用不存在的连接字符串。