我在客戶端和地址之間有一對一的關係。根據我的理解,我必須修補我所擁有的OnModelCreating
方法。現在我準備好給我的應用程序了,但我需要正確初始化我的數據庫;但我得到一個錯誤。需要一個ASP MVC數據庫大師來正確初始化關係
主要計劃是首先創建一個客戶端,然後創建一個地址與之關聯。
這裏是我的上下文類:
public class VolumeV2Context : DbContext
{
public DbSet<GiftCard> GiftCards { get; set; }
public DbSet<Clients> Clients { get; set; }
public DbSet<Address> Address { get; set; }
// use if you need to drop the database
static VolumeV2Context(){
// use if need to reset the models
// Database.SetInitializer(new DropCreateDatabaseIfModelChanges<VolumeV2Context>());
// use to reset whole database tables
Database.SetInitializer(new DropCreateDatabaseAlways<VolumeV2Context>());
}
protected override void OnModelCreating(System.Data.Entity.DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Clients>()
.HasOptional(j => j.Address)
.WithOptionalDependent()
.WillCascadeOnDelete(true);
modelBuilder.Entity<Address>()
.HasRequired(j => j.client)
.WithRequiredDependent()
.WillCascadeOnDelete(true) ;
base.OnModelCreating(modelBuilder);
}
}
模式
public class Address
{
[Required]
public int Id { get; set; }
[DataType(DataType.Text)]
[Display(Name = "Street Address")]
public string StreetAddress { get; set; }
[DataType(DataType.Text)]
[Display(Name = "Postal Code")]
public string PostalCode { get; set; }
[DataType(DataType.Text)]
public string City {get; set; }
[DataType(DataType.Text)]
public string Province {get; set;}
public virtual Clients client { get; set; }
}
public class Clients
{
[Required]
public long Id { get; set; }
[Required]
[DataType(DataType.Text)]
[Display(Name = "First Name")]
public string FirstName { get; set; }
[Required]
[DataType(DataType.Text)]
[Display(Name = "Last Name")]
public string LastName { get; set; }
[Required]
[DataType(DataType.PhoneNumber)]
[Display(Name = "Phone ")]
public string PhoneNumber { get; set; }
public virtual Address Address {get; set;}
[Display(Name = "Email List")]
public Boolean EmailList { get; set; }
[DataType(DataType.EmailAddress)]
[Display(Name = "E-mail")]
public string Email { get; set; }
[DataType(DataType.Text)]
[Display(Name = "Hair Type")]
public string HairType { get; set; }
[DataType(DataType.MultilineText)]
public string Description { get; set; }
}
在我第一次調用數據庫,這是在主索引方法
return View(db.Clients.Take(25).ToList());
它返回錯誤說:
上表將外鍵約束 「FK_dbo.Addresses_dbo.Clients_client_Id」「地址」可以 原因循環或多個級聯路徑。指定ON DELETE NO ACTION或 ON UPDATE NO ACTION,或修改其他FOREIGN KEY約束。 不能創建約束。查看以前的錯誤。
謝謝你的偉大的可視化,我真的需要。所以我評論了代碼,它的工作原理(這是我最初的笑話)。我擔心的真正問題是如何正確刪除客戶端並刪除他們的地址。我應該只使用我的刪除邏輯發佈另一個問題嗎? – Fpanico 2013-03-05 22:14:05
那麼,在這種情況下,你保持刪除客戶端時刪除和地址的級聯刪除。只是沒有其他的方式(不要刪除一個客戶端,因爲地址被刪除。) - 或者你是否說級聯刪除不起作用?例如,你刪除了一個客戶,但地址記錄在那裏是孤兒? – GojiraDeMonstah 2013-03-05 22:34:12