Я боюсь здесь. Я пробовал через аннотации данных и через Fluent API и все еще не работает правильно. Отчаявшись помочь сейчас. В принципе, у меня есть две таблицы. Таблица компаний и адресная таблица. Компания должна иметь адрес головного офиса (который должен проживать в адресной таблице), и адрес должен иметь компанию, которая также принадлежит. Я действительно стараюсь правильно настроить это.Entity Framework 1: 1 отношение Код Первый
Я поставлю код First Entities, а затем покажу, что у меня уже есть.
[Table("Address")]
public class Address
{
[Key]
public long AddressId { get; set; }
public string Address1 { get; set; }
public string Address2 { get; set; }
public string Address3 { get; set; }
public string Address4 { get; set; }
public string Address5 { get; set; }
public string Town { get; set; }
public string County { get; set; }
public string Country { get; set; }
public string PostCode { get; set; }
public virtual Company Company { get; set; }
public DateTime? RemovedDate { get; set; }
public long? RemovedBy { get; set; }
}
[Table("Company")]
public class Company
{
[Key ]
public long CompanyId { get; set; }
public string Name { get; set; }
public string WebsiteUrl { get; set; }
public virtual Address Address { get; set; }
public User LeadUser { get; set; }
public DateTime ActiveSince { get; set; }
public DateTime? ActiveTill { get; set; }
public string VatRegistration { get; set; }
public string LicenseKey { get; set; }
public LicenseStatus LicenseStatus { get; set; }
public bool CanAgreementBeExtended { get; set; }
public string BillingEmail { get; set; }
public string PhoneNumber { get; set; }
public string MobileNumber { get; set; }
public DateTime DateCreated { get; set; }
public DateTime DateUpdated { get; set; }
public virtual ICollection<User> Users { get; set; }
public virtual ICollection<LicenseHistory> LicenseHistories { get; set; }
}
//Seeded data inserted as follows
var testCompany = new Company
{
ActiveSince = DateTime.UtcNow,
Name = "Test Company",
LeadUser = adminUser,
DateCreated = DateTime.UtcNow,
DateUpdated = DateTime.UtcNow,
BillingEmail = "[email protected]",
CanAgreementBeExtended = true,
LicenseStatus = LicenseStatus.PendingAgreement,
MobileNumber = "1234567890",
PhoneNumber = "1234567890",
VatRegistration = "1234567890"
};
context.Companies.AddOrUpdate(u => u.Name, testCompany);
var testAddress = new Address
{
Address1 = "Test Ltd",
Address2 = "1 Test Gardens",
Address3 = "Test Heath",
Address4 = string.Empty,
Address5 = string.Empty,
County = "Test",
Town = "Test",
Country = "United Kingdom",
PostCode = "TE5 T11",
Company = testCompany
};
context.Addresses.AddOrUpdate(u => new { u.AddressId }, testAddress);
testCompany.Address = testAddress;
context.Companies.AddOrUpdate(u => u.Name, testCompany);
//Fluent API set up as follows in the OnModelCreating
modelBuilder.Entity<Address>()
.HasRequired(ad => ad.Company)
.WithOptional(s => s.Address);
Может ли кто-нибудь определить, что я делаю неправильно? Последние несколько дней я играл с различными комбинациями, и это просто не работает. Я просто продолжаю получать ошибки, последняя ошибка на основе вышеприведенного кода ...
Зависимое свойство в ссылочной привязке сопоставляется с созданным магазином столбцом. Столбец: «AddressId».
Любые идеи, пожалуйста?
Спасибо за ответ, я видел этого раньше на моем тралении в Интернете для решения, но это не тихий матча, что я после , Поскольку таблица адресов и таблица компаний используются вместе и независимо друг от друга, у каждого из них есть набор идентификаторов на их ПК. Идея заключается в том, что у компании может быть только один адрес (который является их головным офисом), но компания может владеть несколькими адресами (следовательно, адрес имеет столбец Компании). Это позволяет мне получить адрес головного офиса компаний, а также все адреса, принадлежащие компании. Есть идеи, как это сделать? –
Ran из символов:) ..... Я сделал эту настройку, создавая сами таблицы БД, но не могу представить ее в EF. :( –
У нас есть что-то подобное, когда у человека много адресов, один из которых является основным адресом. Мы пошли много ко многим с тремя таблицами. Person, Address, PersonAddress. PersonAddress имеет navs для Person и Address, а также флаг IsPrimaryAddress У каждого человека и адреса есть коллекция PersonAddresses для навигационных целей. Вот хорошее объяснение: https://lostechies.com/jimmybogard/2014/03/12/avoid-many-to-many-mappings-in-orms/ –