对象必须实现IConvertible

Sco*_*合理论 6 c# mysql linq-to-entities entity-framework

描述:执行当前Web请求期间发生未处理的异常.请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息.

异常详细信息:System.InvalidCastException:Object必须实现IConvertible.

来源错误:

Line 20:         public ActionResult Index()
Line 21:         {
Line 22:             var feeds = (from f in _db.AlertRules.Include("AlertRuleOutages")
Line 23:                          select f).ToList();
Line 24: 
Run Code Online (Sandbox Code Playgroud)

堆栈跟踪:

[InvalidCastException: Object must implement IConvertible.]
   System.Convert.ChangeType(Object value, Type conversionType, IFormatProvider provider) +9508841
   MySql.Data.Entity.EFMySqlDataReader.ChangeType(Object sourceValue, Type targetType) +376
   MySql.Data.Entity.EFMySqlDataReader.GetValue(Int32 ordinal) +129
   System.Data.Common.Internal.Materialization.ErrorHandlingValueReader`1.GetValue(DbDataReader reader, Int32 ordinal) +215
   lambda_method(Closure , Shaper ) +468
   System.Data.Common.Internal.Materialization.Shaper.HandleEntityAppendOnly(Func`2 constructEntityDelegate, EntityKey entityKey, EntitySet entitySet) +218
   lambda_method(Closure , Shaper ) +218
   System.Data.Common.Internal.Materialization.Coordinator`1.ReadNextElement(Shaper shaper) +170
   System.Data.Common.Internal.Materialization.RowNestedResultEnumerator.MoveNext() +235
   System.Data.Common.Internal.Materialization.ObjectQueryNestedEnumerator.TryReadToNextElement() +16
   System.Data.Common.Internal.Materialization.ObjectQueryNestedEnumerator.MoveNext() +57
   System.Collections.Generic.List`1..ctor(IEnumerable`1 collection) +327
   System.Linq.Enumerable.ToList(IEnumerable`1 source) +58
Run Code Online (Sandbox Code Playgroud)

数据库DDL:

CREATE TABLE alertruleoutage
(
Id        INT NOT NULL auto_increment,
RuleId    INT NOT NULL,
StartTime TIME NULL DEFAULT 00:00:00,
EndTime   TIME NULL DEFAULT 23:59:59,
WeekDays  TINYINT NULL,
Count     INT NULL,
TimeFrame TIME NULL DEFAULT 01:00:00,
PRIMARY KEY (Id),
KEY RuleId (RuleId),
CONSTRAINT RuleId FOREIGN KEY (RuleId) REFERENCES alertrule (Id)
);



CREATE TABLE alertrule
    (
    Id             INT NOT NULL auto_increment,
    FeedId         INT NOT NULL,
    TemplateId     INT NOT NULL,
    Enable         BIT (1) NULL DEFAULT b'1',
    `Rule`         VARCHAR (250) NULL,
    UpdateDateTime TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
    PRIMARY KEY (Id),
    KEY AlertFeedId (FeedId),
    KEY AlertTemplateId (TemplateId),
    CONSTRAINT FK_AlertFeedId FOREIGN KEY (FeedId) REFERENCES feed (Id),
    CONSTRAINT FK_AlertTemplateId FOREIGN KEY (TemplateId) REFERENCES alertruletemplate (Id)
    );
Run Code Online (Sandbox Code Playgroud)

POCO型号:

 [Table("AlertRuleOutage")]
public class AlertRuleOutage
{
    [Key]
    public int Id { get; set; }

    public int RuleId { get; set; }

    public DateTime? StartTime { get; set; }

    public DateTime? EndTime { get; set; }

    //public Week WeekDays { get; set; }

    public int? Count { get; set; }

    public DateTime? TimeFrame { get; set; }

    public virtual AlertRule Rule { get; set; }
}

    [Table("AlertRule")]
public class AlertRule
{
    [Key]
    public int Id { get; set; }

    public int FeedId { get; set; }

    public int TemplateId { get; set; }

    public bool? Enable { get; set; }

    public string Rule { get; set; }

    public DateTime? UpdateDateTime { get; set; }

    public virtual Feed Feed { get; set; }

    public virtual AlertRuleTemplate Template { get; set; }

    public virtual List<AlertRuleOutage> AlertRuleOutages { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

db上下文:

    public DbSet<AlertRule> AlertRules { get; set; }

    public DbSet<AlertRuleOutage> AlertRuleOutages { get; set; }
Run Code Online (Sandbox Code Playgroud)

Sco*_*合理论 7

错误的数据类型 AlertRuleOutage

mysqlTime应该映射到 .NET TimeSpan

public TimeSpan? StartTime { get; set; }
Run Code Online (Sandbox Code Playgroud)

另见:http : //www.devart.com/dotconnect/mysql/docs/DataTypeMapping.html