实体框架代码优先,错误:"EntityType 'OfferSequence'没有定义键
本文关键字:OfferSequence EntityType 定义 框架 quot 错误 实体 代码 | 更新日期: 2023-09-27 18:19:24
我首先使用实体框架代码。我正在尝试创建一个名为OfferSequence的新实体,以便在数据库中自动创建表。
问题是,当我尝试用新实体更新数据库时,我得到以下错误但是,正如您在下面看到的,键在属性SequenceStart 上被清楚地定义了在模型生成过程中检测到一个或多个验证错误:
ERP.EnterpriseDataAccessLayer.EnterpriseData。OfferSequence::EntityType 'OfferSequence'没有定义键。为此定义键EntityType。OfferSequences: EntityType: EntitySet 'OfferSequences' is基于没有定义键的'OfferSequence'类型。
public class OfferSequence : IEntity<OfferSequence>
{
public OfferSequence(uint sequenceStart, uint incrementalCounter, uint annualIncrementalCounter)
{
Validate.EnsureIsTrue(incrementalCounter >= sequenceStart && annualIncrementalCounter >= sequenceStart, "Counters can not be lower than sequence start");
SequenceStart = sequenceStart;
IncrementalCounter = incrementalCounter;
AnnualIncrementalCounter = annualIncrementalCounter;
LastUpdateDate = DateTime.UtcNow;
}
[Key]
public uint SequenceStart { get; private set; }
public uint IncrementalCounter { get; private set; }
public uint AnnualIncrementalCounter { get; private set; }
public DateTime LastUpdateDate { get; private set; }
public OfferSequence Clone()
{
OfferSequence copy = new OfferSequence(SequenceStart, IncrementalCounter, AnnualIncrementalCounter);
return copy;
}
object ICloneable.Clone()
{
return Clone();
}
public void Modify(OfferSequence obj)
{
AnnualIncrementalCounter = obj.AnnualIncrementalCounter;
IncrementalCounter = obj.IncrementalCounter;
LastUpdateDate = DateTime.UtcNow;
}
}
似乎你不能使用unsigned int作为实体框架中的键:我没有任何官方的说法,但是这个问题的答案表明它,就像这个一样。
编辑:实际上这是EF团队关于这个的官方说法。他们是这么说的:
EF Team Triage: EF内部不支持无符号整数用于存储元数据的模型。我们应该考虑支持它们,或者有一种处理非显式类型的方法支持。
错误信息肯定可以在这里得到改善,并且是一种症状我们的规则"代码优先"忽略了所有不支持的属性类型。我们可以检测到这种情况,并提供更好的信息。
考虑到我们在EF6版本中的位置,我们不会改变现在的东西。移动到Future以考虑即将发布的版本。