Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Object must implement IConvertible

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.InvalidCastException: Object must implement IConvertible.

Source Error:

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: 

Stack Trace:

[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

DataBase 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)
    );

POCO Models:

 [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; }
}

db context:

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

    public DbSet<AlertRuleOutage> AlertRuleOutages { get; set; }
like image 218
Scott 混合理论 Avatar asked Sep 27 '12 02:09

Scott 混合理论


People also ask

How do you solve an object must implement IConvertible?

Solution 2 you have to implement IConvertable on the object because Covert. ChangeType() expects IConvertable object. So Convert object knows how to convert given object to the type that you need - even it is the same type.

What is IConvertible interface in C#?

The IConvertible interface allows conversion of an object to basic data types and allows the conversion methods in the Convert class to use that object. When implementing the IConvertible interface, create your own type-specific methods for each of the supplied conversion methods.


1 Answers

wrong data type in AlertRuleOutage

mysql Time should map to .NET TimeSpan:

public TimeSpan? StartTime { get; set; }

see also: http://www.devart.com/dotconnect/mysql/docs/DataTypeMapping.html

like image 128
Scott 混合理论 Avatar answered Oct 12 '22 23:10

Scott 混合理论