【发布时间】:2013-04-12 19:42:41
【问题描述】:
注意:使用的技术是 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
那些都是他们的,这第三个怎么这么莫名其妙......
第二部分是:如果 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);
}
}
}
【问题讨论】:
-
您的服务和位置之间的关系是多对多的?
-
我记得我遇到过这样的问题,问题是我写错了映射,当多对多或一对多没有正确映射,或者确切的外键没有正确映射时会发生这种情况写给我们看你为这些类写的映射。
-
@Shyju 位置可以有很多服务,因为一个服务可以有很多位置。另请参阅映射的更新 OP。
-
如果您是 EF 新手,我建议您先通过 SQL 服务器管理工具创建数据库,然后通过此免费工具生成类和映射:“Entity Framework Power Tools”,以看看它是如何正确完成的。只需安装它,点击你的项目,你会看到一个新的选项实体框架,它连接到数据库并生成类和映射以及你需要的一切。:visualstudiogallery.msdn.microsoft.com/…
-
@TheWebs:你为什么有
ServiceAssignments。那只是为了在表之间建立多对多关系吗?
标签: asp.net-mvc-3 entity-framework