0

注:使用されているテクノロジは、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);
        }
    }
}
4

1 に答える 1