Property、Person、Address、および Lease の 4 つのテーブルのシード データを使用して、SQL データベースを初期化しようとしています。問題は、Person、Address、および Lease エンティティにシード データを入力することです。Package Management Counsel ウィンドウから update-database -force を実行すると、「エントリの更新中にエラーが発生しました。詳細については内部例外を参照してください」というエラーが表示されます。プロパティ テーブルは、update-database の実行後にシード データが取り込まれる 4 つのテーブルのうちの唯一のテーブルです。
この問題は、このデータベース設計を複雑にする 1 対 1 および 1 対多の関係が原因であると想定しています。シード データが Lease、Person、アドレス エンティティ。
データベース図:
protected override void Seed(PropertyContext context)
{
GetProperty().ForEach(c => context.Properties.Add(c));
context.SaveChanges();
GetAddress().ForEach(c => context.Address.Add(c));
context.SaveChanges();
GetTenant().ForEach(c => context.Person.Add(c));
context.SaveChanges();
GetLease().ForEach(c => context.Leases.Add(c));
context.SaveChanges();
}
private static List<Property> GetProperty()
{
var property = new List<Property> {
new Property
{
PropertyId = 1,
PropName = "Test",
Address = "13265 Test St.",
Bathrooms = 3,
Bedrooms = 2,
Garage = 2,
SqFeet= 1400,
Notes = "Give me a note",
DateCreated = DateTime.Now,
}
};
return property;
}
private static List<Address> GetAddress()
{
var address = new List<Address>{
new Address
{
AddressId = 1,
City = "Corona",
State = "CA",
ZipCode = "92883"
}
};
return address;
}
private static List<Person> GetTenant()
{
var person = new List<Person>{
new Person
{
PersonId = 1,
FirstName = "Test",
LastName = "Man",
EmailAddress = "test@gmail.com",
Employer = "Verizonwireless",
JobTitle = "Baseline Tech",
PropertyOwner = false,
Notes = "None",
DateCreated = DateTime.Now,
LeaseId = 1
}
};
return person;
}
private static List<Lease> GetLease()
{
var lease = new List<Lease> {
new Lease
{
LeaseId = 1,
StartDate =DateTime.Today,
EndDate = DateTime.Now.AddDays(30),
LeaseAmount = 1550,
SecurityDeposit = 1550,
PetDeposit = 0.0,
OtherDeposit = 0.0,
Notes = "None",
LeaseStatus = "Avialable",
DateCreated = DateTime.Now,
PropertyId = 1
}
};
return lease;
}
public class Address
{
[Key]
[ForeignKey("Property")]
public int AddressId { get; set; }
[Required(ErrorMessage = "City name is required.")]
[MaxLength(35)]
public string City { get; set; }
[Required(ErrorMessage = "State name is required.")]
[Display(Name = "State")]
[MaxLength(2)]
public string State { get; set; }
[Required(ErrorMessage = "Postal code is required.")]
[Display(Name = "Zip/Postal Code")]
[MaxLength(5)]
public string ZipCode { get; set; }
public virtual Property Property { get; set; }
}
1 対 1 の関係を持つモデル クラス:
public class Address
{
[Key]
[ForeignKey("Property")]
public int AddressId { get; set; }
[Required(ErrorMessage = "City name is required.")]
[MaxLength(35)]
public string City { get; set; }
[Required(ErrorMessage = "State name is required.")]
[Display(Name = "State")]
[MaxLength(2)]
public string State { get; set; }
[Required(ErrorMessage = "Postal code is required.")]
[Display(Name = "Zip/Postal Code")]
[MaxLength(5)]
public string ZipCode { get; set; }
public virtual Property Property { get; set; }
}
public class Property
{
public Property()
{
DateCreated = DateTime.Now;
}
public int PropertyId { get; set; }
[Required(ErrorMessage = "Property name is required.")]
[Display(Name = "Property Name")]
[MaxLength(75)]
public string PropName { get; set; }
[Required(ErrorMessage = "Property address is required.")]
[MaxLength(200)]
public string Address { get; set; }
[Required(ErrorMessage = "Size of the property is required.")]
[Display(Name = "SQ Feet")]
public int SqFeet { get; set; }
[Required(ErrorMessage = "Number of bedrooms is required. Enter zero for none.")]
public int Bedrooms { get; set; }
[Required(ErrorMessage = "Number of bathrooms is required.")]
public int Bathrooms { get; set; }
public int Garage { get; set; } // Stores an index value for a dropdown list
[MaxLength(500, ErrorMessage = "Max number of characters is 500.")]
public string Notes { get; set; }
[Required]
public DateTime DateCreated { get; set; }
}