一段时间以来,我一直在研究和阅读如何解决我的问题,甚至认为我发现了类似的问题,但没有任何明确的答案,我尝试的一切似乎都没有奏效。我对 ASP.NET MVC4 有点熟悉(我的主要能力依赖于 PHP 和 MySQL)。出于学习的目的,我决定做一个小项目来增强我的 C# noobie 知识,但我遇到了一个小问题,我觉得这可能很简单,有些事情我没有记住,但我如果您为我提供以下想法或解决方案,将不胜感激:
我创建了以下模型:
public class Address
{
[Key]
public int AddId { get; set; }
public int HouseNo { get; set; }
public string AddLine1 { get; set; }
public string AddLine2 { get; set; }
public string City { get; set; }
public string PostCode { get; set; }
//public ICollection<GpModel> GpList { get; set; }
//public ICollection<PharmacyModel> PharmacyList { get; set; }
}
public class GpModel
{
[Key]
public int GpId { get; set; }
public int AddId { get; set; }
public string GpName { get; set; }
public Int64 GpTelephone { get; set; }
[ForeignKey("AddId")]
public virtual Address GpAddress { get; set; }
public ICollection<GpnPharmacy> GpnPharmacies { get; set; }
}
public class PharmacyModel
{
[Key]
public int PharmacyId { get; set; }
public int AddId { get; set; }
public string PharmacyName { get; set; }
public Int64 PharmacyTelephone { get; set; }
[ForeignKey("AddId")]
public virtual Address PharmacyAddress { get; set; }
public ICollection<GpnPharmacy> GpnPharmacies { get; set; }
}
public class GpnPharmacy
{
[Key]
public int GpnPharId { get; set; }
public int GpId { get; set; }
public int PharmacyId { get; set; }
//[ForeignKey("GpId")]
public virtual GpModel Gp { get; set; }
//[ForeignKey("PharmacyId")]
public virtual PharmacyModel Pharmacy { get; set; }
}
public class MyScriptV1Entities : DbContext
{
public DbSet<Address> Addresses { get; set; }
public DbSet<GpModel> Gps { get; set; }
public DbSet<PharmacyModel> Pharmacies { get; set; }
public DbSet<GpnPharmacy> GpnPharmacies { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
modelBuilder.Entity<GpModel>()
.HasRequired(s => s.GpAddress)
.WithMany()
.WillCascadeOnDelete(true);
modelBuilder.Entity<PharmacyModel>()
.HasRequired(s => s.PharmacyAddress)
.WithMany()
.WillCascadeOnDelete(true);
base.OnModelCreating(modelBuilder);
}
}
关系如下:
- 每个 GpModel 和 PharmacyModel 都有一个地址。
- PharmacyModel 将“注册”到 0 个或多个 GpModel
- 一个 GpModel 将有 0 个或多个 PharmacyModel 在其名称下“注册”
Pharmacy
基本上我试图在和之间创建多对多关系Gp
,为此我认为创建一个单独的表GpnPharmacy
来保存它们的ID并基本上“关联”它们是个好主意。
但是我认为我的问题取决于我的模型构建器(我可能错了),但我似乎无法用我在网上找到的东西来解决它。
GpController
当我在我的(通过使用/Gp/Details/1
)上启动以下操作时
public ActionResult Details(int id)
{
var GpModel = MySciptV1DB.Gps.Find(id);
return View(GpModel);
}
我没有从数据库中获取第一个 Gp 详细信息,而是收到以下错误:
在表 'PharmacyModel' 上引入 FOREIGN KEY 约束 'FK_dbo.PharmacyModel_dbo.Address_AddId' 可能会导致循环或多个级联路径。指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN KEY 约束。
无法创建约束。请参阅以前的错误。
我应该提到,我的应用程序首先使用 SampleData.cs 文件中的数据填充数据库。由于某种原因,这些表尚未创建。
如果您需要更多信息,请随时询问,如果我不够清楚,我很抱歉,但我对 ASP.NET 上的 SQL 有点陌生。非常感谢您的宝贵时间。
问候。