0

データベース内に、いくつかの異なるモデルで使用できる画像のテーブルを作成したいと考えています。私はエンティティ フレームワークを使用しており、画像クラスを次のように定義しています。

public class Images
{
    public int ID { get; set; }
    public String Name {get; set;}
    public byte[] ImageData { get; set; }  
    public string Type { get; set; }
}

次に、画像を保持する必要がある他のモデルからこれにリンクしたいと思います。例えば

public class Project
{
    public int ID { get; set; }
    public String Name { get; set; }
    public DateTime StartDate { get; set; }
    public DateTime EndDate { get; set; }
    public virtual ICollection<tImages> Images { get; set; }

}

そしてまた

public class User
{
    public int ID { get; set; }
    public String UserName { get; set; }
    public virtual ICollection<tImages> Images { get; set; }
}

問題は、エンティティ フレームワークがプロジェクトとユーザーの両方の外部キーをイメージ テーブルに追加していることです。私はこれを期待していたのだと思います。

私が欲しいのは、画像テーブルにインデックスを付けるために使用できる画像キーを定義することです。この効果を得るためにクラスを定義する方法がわかりません。たとえば、エンティティ クラスを定義して以下の結果を得るにはどうすればよいですか。

プロジェクト表

//ID    Name        StartDate   EndDate     Image
//1     Project1    05/02/2013  06/04/2013  PROJ01IMG

ユーザーテーブル

//ID    UserName    Image       
//1     Bob         USER01IMG       

画像テーブル

//ID  Name          Imagekey    ImageData           Type
//1   img1          PROJ01IMG   0xFFF00F1 .. etc    JPEG
//2   teamphoto     PROJ01IMG   0xFEB0011 ..etc     JPEG
//3   outline       PROJ01IMG   0xFFF0AA3 ..etc     PNG
//4   bob           USER01IMG   0xFFF01233 ..etc    JPEG

もちろん、外部キーを持つことが正しいアプローチであり、心配する必要はないかもしれません。私はたくさんのモデルを持っていて、それらはすべて画像を保存する必要があるので、すべての画像の検索/ギャラリーなどを簡単に行えるようにするため、複数の画像テーブルではなく1つのテーブルに配置したいと思います。

これは完全な初心者の質問であり、明らかな何かが欠けていると感じているので、そうであればお詫びします。

4

1 に答える 1

1

EF に FK をマップさせたくない場合、代わりにイメージ キーに基づいて手動でリストを作成する場合は、次のようにエンティティを定義します。しかし、FKを使用して、あなたが持っていたものの方が良いと思います。

public class Project
{
    public int ID { get; set; }
    public String Name { get; set; }
    public DateTime StartDate { get; set; }
    public DateTime EndDate { get; set; }
    public string ImageKey { get; set; }
    [NotMapped]
    public List<Image> Images {get; set;}
}

public class User
{
    public int ID { get; set; }
    public String UserName { get; set; }
    public string ImageKey { get; set; }
    [NotMapped]        
    public List<Image> Images {get; set;}
}

次のようにクラスを定義して、それが必要かどうかを確認してみてください。

public class Images
{
    public int ID { get; set; }
    public String Name {get; set;}
    public byte[] ImageData { get; set; }  
    public string Type { get; set; }

    public virtual User User { get; set; }
    public virtual Project Project { get; set; }
}

public class Project
{
    public int ID { get; set; }
    public String Name { get; set; }
    public DateTime StartDate { get; set; }
    public DateTime EndDate { get; set; }

}

public class User
{
    public int ID { get; set; }
    public String UserName { get; set; }
}

これは、FK を Project と User の Images にマップする必要があります。これは、あなたが本当に探しているものだと思います。

于 2013-02-07T20:06:42.353 に答える