注:使用されているテクノロジは、ASP.Net MVC 3、Entity、SQL Server Management Studio です。
問題?
実行すると、コンテキストは次のようになります。public class DatabaseInit : DropCreateDatabaseAlways<LocationAppContext>
データベースを作成しますが、サービス割り当てテーブルには、呼び出される
ServiceAssignment_Service
べきではないときに呼び出される余分な外部キーがあります。
私のサービス割り当てモデルは次のとおりです。
namespace LocationApp.Models
{
public class ServiceAssignment
{
public int id { get; set; }
public int locationID { get; set; }
public int ServiceID { get; set; }
public virtual Location Location { get; set; }
public virtual ServiceAssignment Service { get; set;}
}
}
サービスモデルは次のとおりです。
namespace LocationApp.Models
{
public class Service
{
public Service()
{
this.ServiceAssignments = new HashSet<ServiceAssignment>();
}
public int id { get; set; }
public string name { get; set; }
public string description { get; set; }
public bool active { get; set; }
public string icon { get; set; }
public virtual ICollection<ServiceAssignment> ServiceAssignments { get; set; }
}
}
そうは言っても、関係は単純です。
サービス割り当てには、多くのロケーション ID とサービス ID があります。
この余分な外部キーが生成されるのはなぜですか? 現在のキー。存在する必要があります。
- PK : テーブルのメイン PK
- FK 1 : Location_ServiceAssignment
- FK 2 : Service_ServiceAssignment
それらは彼らのものですが、この 3 番目のものは不可解です....
2 番目の部分は次のとおりです。ID 2 の場所のサービス ID が 2,3,6,7 の場合、返されたすべてのサービス ID を取得するにはどうすればよいですか。オブジェクトをサービス クエリに渡して、サービスに関するすべての情報を取得できます。 IDベース?
アップデート:
コンテキスト クラス:
namespace LocationApp.DAL
{
public class LocationAppContext : DbContext
{
public DbSet<Content> Contents { get; set; }
public DbSet<Location> Locations { get; set; }
public DbSet<ServiceAssignment> ServiceAssignments { get; set; }
public DbSet<Service> Services { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
modelBuilder.Entity<Location>().HasMany(sa => sa.ServiceAssignments);
modelBuilder.Entity<Service>().HasMany(sa => sa.ServiceAssignments);
}
}
}