私は、Entity Framework に対して Code First アプローチを使用してきました。Event クラス、Band クラス、および多対多の関係をマップする EventBands クラスがあります。Code First のアプローチは (EventBands クラスを持っていなかったとき) うまくいきましたが、多対多のテーブルに追加の値を格納することにしました。今、私はこのエラーメッセージを受け取ります:
System.Data.Edm.EdmEntityType: : EntityType 'EventBands' にはキーが定義されていません。この EntityType のキーを定義します。
System.Data.Edm.EdmEntitySet: EntityType: EntitySet EventBands は、キーが定義されていない型 EventBands に基づいています。
エラーメッセージの意味は明らかです。ただし、解像度はそれほど明白ではありません。モデル バインディング メソッドをオーバーライドする必要があると思いますが、このアプローチでキーをマップする方法が完全にはわかりません。
問題のクラスを以下に含めました。
前もって感謝します、
ジョン
イベント:
#region Properties
private int eventId;
public int EventId
{
get
{
return eventId;
}
set
{
eventId = value;
}
}
private string name;
public string Name
{
get
{
return name;
}
set
{
name = value;
}
}
private string description;
public string Description
{
get
{
return description;
}
set
{
description = value;
}
}
private DateTime startDatetime;
public DateTime StartDateTime
{
get
{
return startDatetime;
}
set
{
startDatetime = value;
}
}
private DateTime endDatetime;
public DateTime EndDateTime
{
get
{
return endDatetime;
}
set
{
endDatetime = value;
}
}
private int venueUserId;
public int VenueUserId
{
get { return venueUserId; }
set { venueUserId = value; }
}
public virtual Venue Venue
{
get;
set;
}
public virtual ICollection<EventReview> Reviews
{
get;
set;
}
public virtual ICollection<EventBands> EventBands
{
get;
set;
}
public virtual ICollection<Fan> Attendees
{
get;
set;
}
#endregion
#region Constructor
public Event()
{
EventBands = new HashSet<EventBands>();
Attendees = new HashSet<Fan>();
StartDateTime = DateTime.Now;
EndDateTime = DateTime.Now.AddDays(14);
}
#endregion
バンド:
public class Band : PostableUser
{
#region Properties
private int genreGenreId;
public int GenreGenreId
{
get { return genreGenreId; }
set { genreGenreId = value; }
}
public virtual Genre Genre
{
get;
set;
}
public virtual ICollection<Album> Albums
{
get;
set;
}
public virtual ICollection<BandReview> Reviews
{
get;
set;
}
public virtual ICollection<EventBands> EventBands
{
get;
set;
}
#endregion
#region Constructor
public Band()
{
EventBands = new HashSet<EventBands>();
}
#endregion
}
イベントバンド
#region Properties
private int eventEventId;
public int EventEventId
{
get { return eventEventId; }
set { eventEventId = value; }
}
public virtual Event Event
{
get;
set;
}
private int bandUserId;
public int BandUserId
{
get { return bandUserId; }
set { bandUserId = value; }
}
public virtual Band Band
{
get;
set;
}
private DateTime startDateTime;
public DateTime StartDateTime
{
get { return startDateTime; }
set { startDateTime = value; }
}
private DateTime endDateTime;
public DateTime EndDateTime
{
get { return endDateTime; }
set { endDateTime = value; }
}
#endregion
BandUserId は User 基本クラスから継承されます。