1

私はasp.net mvc 4とエンティティフレームワークのコードファーストアプローチを使用しています。次のエンティティモデルがあります

public class User
{
    public virtual int Id { get; set; }
    public virtual String FirstName { get; set; }
    public virtual String MiddleName { get; set; }
    public virtual String LastName { get; set; }
}

フルネームを表示する必要があるユーザーリストビューページの場合、次のようなユーザーモデルで取得専用プロパティを作成しようとしています

public virtual String FullName{
    get{
        return FirstName + " " + MiddleName + " " + LastName;
    }
}

しかし、それが機能するかどうかはわかりません。また、エンティティ フレームワークがこれをデータベース列にマップすることも望ましくありません。

ビューのみの他のプロパティから生成された同様の get only プロパティを使用できますか? 何をすべきかについて何か提案をしてもらえますか??

4

2 に答える 2

7

ドメイン エンティティの構成方法に応じて、DataAnnotations または EntityConfigurationType クラスを使用して、[NotMapped] DataAnnotation を使用できます。

public class User
{
    public virtual int Id { get; set; }
    public virtual String FirstName { get; set; }
    public virtual String MiddleName { get; set; }
    public virtual String LastName { get; set; }
    [NotMapped]
    public virtual String FullName 
    {
        get{
             return FirstName + " " + MiddleName + " " + LastName;
        }
    }
}

または、EntityTypeConfiguration を実装する特定のクラスで、プロパティを EntityFramework によって無視されるように設定し、OnModelCreating イベントでコンテキスト構成コレクションに追加できます。

public class UserConfiguration : EntityTypeConfiguration<User>
{
    public UserConfiguration()
    {
        Ignore(u=>u.FullName);
    }
}
于 2012-10-04T17:53:25.003 に答える
0

ビューに表示する必要があるためにモデルにこのプロパティを配置している場合は、そもそも MVC の要点を見逃しています。モデルは、使用するデータを適切に記述する方法で構築する必要があります。これは、データベース構造を反映したエンティティ モデルである場合とそうでない場合があります。また、ビューが探しているものと正確に一致する場合とそうでない場合があります。

この場合、これをモデルに追加する理由と、単にコードが肥大化しているだけなのかを自問する必要があります。この特定の文字列を作成するために必要な情報は、モデル内に既にあります。ビューがこの情報を特定の形式で表示する必要がある場合、それはビューに属します。ただし、毎回まったく同じ形式で他のいくつかの場所でこの正確なロジックが必要になることがわかっている場合は、このプロパティがビューに属していると主張できます。これは、データのよりグローバルに記述的な実装であるためです。問題があります。

あなたの具体的な例を考えると、この読み取り専用プロパティは、私の意見では単純にコードの肥大化です。この性質の何かが、このデータを使用するビューに属しています。

于 2012-10-04T17:49:30.170 に答える