2

私のコードは1か月以上機能し、アプリはrssフィード(http://www.whitehouse.gov/feed/blog/white-house)を解析し、ニュースをdbに挿入します。

今日、アプリがこのニュース「2013年の一般教書演説のファーストレディの箱」をdbに追加しようとしたときに例外が発生しました。これが私のコードです:

News item = Query.instance().AddNews(channel.Guid, channel.Description, channel.Link, channel.PublishDate, channel.Title);

   public News AddNews(string guid, string description, string link, DateTime publishDate, string title)
    {
        // create a new and add it to the context
        News item = new News { Guid = guid, Description = description, Link = link, PublishDate = publishDate, Title = title };
        // add the new to the context
        db.NewsItems.InsertOnSubmit(item);
        // save changes to the database
        db.SubmitChanges();

        return item;
    }

私はデバッグを行いました、そして問題はニュースの説明にあります(それは長さのようです)、ここに例外があります:

「タイプ'System.InvalidOperationException'の例外がMicrosoft.Phone.Data.Internal.ni.dllで発生し、管理対象/ネイティブ境界の前で処理されませんでしたタイプ'System.InvalidOperationException'の最初のチャンスの例外がSystem.Dataで発生しました.Linq.ni.dll "

これはdbへの列の説明です

private string _description;
    [Column]
    public string Description
    {
        get
        {
            return _description;
        }
        set
        {
            if (_description != value)
            {
                NotifyPropertyChanging("Description");
                _description = value;
                // Remove HTML tags. 
                _description = Regex.Replace(_description, "<[^>]+>", string.Empty);
                // Remove newline characters
                _description = _description.Replace("\r", "").Replace("\n", "");
                // Remove encoded HTML characters
                _description = HttpUtility.HtmlDecode(_description);
                //replace spaces
                _description = _description.Replace("  ", "");

                //if (!string.IsNullOrEmpty(_description) && _description.Length > 3900)
                //    _description = _description.Substring(0, 3900);

                NotifyPropertyChanged("Description");
            }
        }
    }

これをコメント解除すると、機能します。

//if (!string.IsNullOrEmpty(_description) && _description.Length > 3900)
//    _description = _description.Substring(0, 3900);
4

2 に答える 2

1

私たちはあなたの質問を助けるために例外の本文が必要です。しかし、(Emiliano Maglioccaが言ったように)問題は、DB内のDescriptionセルが挿入しようとしている文字よりも少ない文字を保持できることだと思います。行の説明のタイプをvarchar(max)またはTextに変更して修正できます。とにかく、例外の本体を提供し、それから私たちはあなたを助けます。

Asnwer:

列Descriptionのデータ型をVarchar(max)に変更する必要があります。そうすると、varchar(max)は最大2 GBのテキストを保持できるため、この列に任意の量のテキストを自由に保存できます。codeFirstの方法でテーブルを生成するときは、次のような属性を使用します。[Column(TypeName = "varchar(MAX)")] public string Description .. ..

[列]の代わりにパブリック文字列説明...

于 2013-02-13T10:21:33.830 に答える
0

マリスのおかげで、私は正しい解決策を見つけたと示唆しています:

[Column(DbType = "ntext")] 
public string Description

ではなく

[Column(TypeName = "varchar(MAX)")] 
public string Description

2つ目はWindowsPhoneでは機能しません;)

于 2013-02-19T08:59:17.570 に答える