2014-08-29 2 views
4

Я пытаюсь запустить приложение с Mono. Он отлично работает на IIS, но я хочу, чтобы он работал на Mono. Но это всегда бросает это мне:ASP.NET MVC4 + Razor на Mono + EF 6 Сбой даты DateTime

Свойство «CreateDate» в «Article» не может быть установлено в значение «System.String». Вы должны установить это свойство в ненулевое значение типа «System.DateTime».

Дело в том, что место, где она брошена это:

public Article[] Select(int number) 
     { 
      return DbContextProvider.Current.Set<Article>() 
       .OrderByDescending(n => n.CreateDate) 
       .Take(number) 
       .ToArray(); 
     } 

Там нигде не любое использование System.String. На самом деле, единственное место, где он преобразуется в строку, здесь:

@using BaseSite.Extensions.DateTimeExtensions 
@model Classic.Views.Home.Articles.ArticleViewModel 

<div class="article-wrapper"> 
    <div class="article-title"> 
     @Html.ActionLink(Model.Title, "Index", "Articles", new RouteValueDictionary{{"articleId", Model.ArticleId}}, null) 
    </div> 
    @Html.Raw(Model.Text) 
    <div class="article-data date"> 
     @Html.ActionLink(Model.UserId, "Index", "Profile", new RouteValueDictionary{{"userId", Model.UserId}}, null), 
     @Model.CreateDate.Format(true) 
    </div> 
</div> 

Но ошибка бросают путь до этого. И он работает на IIS, только на Mono появляется такая странная ошибка.

Макет базы данных таблицы:

CREATE TABLE [dbo].[Articles](
    [ArticleId] [uniqueidentifier] NOT NULL, 
    [UserId] [nvarchar](30) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, 
    [CreateDate] [datetime2](7) NOT NULL, 
    [Title] [nvarchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, 
    [Text] [nvarchar](max) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, 
PRIMARY KEY CLUSTERED 
(
    [ArticleId] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] 

отображение классов:

using System; 

namespace BusinessObjects.Articles 
{ 
    public class Article 
    { 
     public Guid ArticleId { get; set; } 
     public string UserId { get; set; } 
     public DateTime CreateDate { get; set; } 

     public string Title { get; set; } 
     public string Text { get; set; } 
    } 
} 

using System.Data.Entity; 

namespace BusinessObjects.Articles 
{ 
    public class ArticleMapper : IDbMapper 
    { 
     public void Map(DbModelBuilder modelBuilder) 
     { 
      var entity = modelBuilder.Entity<Article>(); 

      entity.HasKey(n => n.ArticleId); 
      entity.Property(n => n.ArticleId).IsRequired(); 

      entity.Property(n => n.UserId).IsRequired().HasMaxLength(30); 
      entity.Property(n => n.Title).IsRequired().HasMaxLength(50); 
      entity.Property(n => n.Text).IsRequired().IsMaxLength(); 
     } 
    } 
} 

И да. У меня также есть другие таблицы с DateTime, все они получают эту ошибку. И все они работают нормально на IIS (MS Stack), это только ошибки на Mono + xsp4. Может ли кто-нибудь помочь? Я потерялся с этой привязанностью.

PS: Я пробовал почти все моно версии, прямо сейчас я на Mono мастер мерзавца 3.8.1 (мастер/38c3874), то же самое с 3,6, 3.2.8 и т.д.

+2

Я думаю, что у меня были проблемы с datetime2 как столбец SQL на Mono раньше, кажется, что он еще не поддерживается. Можете ли вы попробовать удалить столбец и посмотреть, работает ли он тогда? –

+0

Ага, так что это столбец datetime2 на ошибке Mono? Потому что я рассматриваю переход на PgSql, может ли это помочь? – Evengard

+0

Работает ли он без datetime2? Миграция в PgSql может помочь в этом случае, поскольку я не думаю, что он использует этот тип. –

ответ

1

Как уже упоминалось Александр Köplinger, кажется, быть ошибкой «datetime2» внутри Mono. Исправлено переходом от MsSql к PostgreSql - это было в планах.

Смежные вопросы