0

私のソリューションは、ASP.NET MVC 4、EF5、Code First、Visual Studio 2012 Express、SQL Server 2012 Express でうまく機能するはずです。

場所オブジェクトで多くのタグを保存する必要があります。別の質問では、リストを使用してこれを達成することが提案されました。

asp.net MVC 4、場所のタグ付け - ベスト プラクティス (パブ、ストア、レストランなど)

すなわち

public List<String> Tags {get;set;}

追加すると、データベースにまったく永続化されません。どうすれば持続させることができますか?

ありがとう。

アップデート

これには、多対多の関係が必要です。たとえば、ある場所に Cafe と Cycle Shop のタグを付けることができます。カフェやサイクルショップがたくさんあります。

   public class Place
   {
      public Place()
      {
         // Set default value of dateAdded to now
         DateAdded = DateTime.Now;
      }

      [ScaffoldColumn(false)]
      public virtual int PlaceID { get; set; }

      public virtual List<Tag> Tags { get; set; }

      [ScaffoldColumn(false)]
      [DisplayName("Date Added")]
      public virtual DateTime DateAdded { get; set; }

      [Required(ErrorMessage = "Place Name is required")]
      [StringLength(100)]
      public virtual string Name { get; set; }
      public virtual string URL { get; set; }

      [DisplayName("Contact Name")]
      public virtual string ContactName { get; set; }
      public virtual string Address { get; set; }
      public virtual string City { get; set; }

      [DisplayName("Post Code")]
      public virtual string PostCode { get; set; }
      public virtual string Website { get; set; }
      public virtual string Phone { get; set; }

      [EmailAddress(ErrorMessage = "Please enter valid email")]
      public virtual string Email { get; set; }
      public virtual string About { get; set; }
      public virtual string Image { get; set; }
   }
4

2 に答える 2

5

タグはデータベースでどのように表現されると思いますか? EF がリストにマップするネイティブの SQL Server 型はありません (より一般的なマッピングは、テーブルの行からオブジェクトのリストへのマッピングです)。そのため、何らかの操作を行う必要があります。それを単一のセル (つまり、1 つのフィールド) にしたい場合は、データベースでは nvarchar に、コードでは文字列にします。

次に、コードで処理する方が簡単なため、リストを保持し、次の LINQ クエリを使用してリストをコンマ区切りのリストに変換します。これは文字列になります。そこから、他の文字列と同様に nvarchar に変換できます。

string csl = myList.Aggregate((c, n) => c + "," + n));

リストに戻るには、ただ行うだけです。

List<string> = csl.Split(',').ToList();

データをどのように表現するかに関係なく、クラスにリストを追加するだけでは簡単にはなりません。あなたのアプリケーションにとって何が最も理にかなっているのかを考えなければなりません.あなたの質問は完全な解決策を与えるにはあまりにも漠然としているので、これはあなたが始めるための単なるアイデアです.

于 2013-05-20T22:38:01.357 に答える
3

evanmcdonnal が言ったように、EF は文字列の単純なリストをデータベースにマップできません。簡単な解決策は、Tag エンティティを作成することです。

public class Tag
{
    public Place Place { get; set; }
    public string Name { get; set; }
}

次に、place エンティティで、タグのリストを使用します。

public List<Tag> Tags { get; set; }

//just a helper, not required
public void AddTag(string tagName)
{
    Tag tag = new Tag { Name = tagName };
    Tags.Add(tag);
}

その結果、Places テーブルへの外部キーを含む新しい Tags テーブルがデータベースに作成されます。

于 2013-05-20T23:00:00.613 に答える