Свойство навигации настроено с конфликтующими кратностями. Fluent APIC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Свойство навигации настроено с конфликтующими кратностями. Fluent API

Сообщение Anonymous »

У меня есть некоторые реляционные проблемы между двумя таблицами, одна ко многим.
Вся концепция заключается в следующем:
Таблица 1: Страна:

Помимо собственных полей он также содержит две коллекции ICollections, одна из которых указывает на коллекцию регионов, а другая — на города.
Таблица 2: Регион

Помимо собственных полей, это также содержит CountryId и ICollection городов.
Таблица 3: Город

Помимо собственных полей, она также содержит CountryId и RegionId (где RegionId может быть нулевым).
Основная идея заключается в том, что страна может иметь регион(ы) и/или город(а).
Это означает, что каждый внешний ключ от региона/города до CountryId не может быть нулевым. Но внешний ключ от города к региону может быть нулевым, поскольку «некоторые» страны, в данном случае регионы, не нужны.
Обратите внимание, что все три таблицы также ссылаются, с ICollection в среднюю таблицу, которая, в свою очередь, сохраняет связь между ними.
Страна:

Код: Выделить всё

public class Country
{
public Guid Id { get; set; }
public int CountryId { get; set; }
public Guid ComponentId { get; set; }

public string NumCode { get; set; }
public string Code2 { get; set; }
public string Code3 { get; set; }

public virtual ICollection Regions { get; set; }
public virtual ICollection Cities { get; set; }
public virtual ICollection AdvertsGeographies { get; set; }
}

public class CountryMap()
{
// Primary Key
HasKey(t => t.Id);
Property(e => e.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);

// Unique Index
Property(e => e.ComponentId)
.HasColumnAnnotation("Index", new IndexAnnotation(new IndexAttribute("IX_Unique_Component", 1) { IsUnique = true }));
Property(e => e.CountryId)
.HasColumnAnnotation("Index", new IndexAnnotation(new IndexAttribute("IX_Unique_Country", 1) { IsUnique = true }));

// Properties

// Table & Column Mappings
ToTable("Country");

Property(e => e.Id).HasColumnName("Id");
Property(e => e.CountryId).HasColumnName("CountryId");
Property(e => e.ComponentId).HasColumnName("ComponentId");
Property(e => e.Code2).HasColumnName("Code2");
Property(e => e.Code3).HasColumnName("Code3");
Property(e => e.NumCode).HasColumnName("NumCode");

// Relationships
HasMany(t => t.Regions)
.WithRequired(t => t.Country).WillCascadeOnDelete(false);

HasMany(t => t.Cities)
.WithRequired(t => t.Country).WillCascadeOnDelete(false);

}
Объект региона:

Код: Выделить всё

public class Region
{
public Region()
{
this.Cities = new HashSet();
}
public Guid Id { get; set; }
public Guid CountryId { get; set; }
public virtual Country Country { get; set; }
public string Name { get; set; }

public virtual ICollection Offices { get; set; }
public virtual ICollection Cities { get; set; }
public virtual ICollection OpenApplications { get; set; }
public virtual ICollection Subscriptions { get; set; }
public virtual ICollection AdvertsGeographies { get; set; }
}

public class RegionMap()
{
// Primary Key
HasKey(t => t.Id);
Property(e => e.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);

// Unique Index
Property(e => e.Name)
.HasColumnAnnotation("Index", new IndexAnnotation(new IndexAttribute("IX_Unique", 1) { IsUnique = true }));
Property(e => e.CountryId)
.HasColumnAnnotation("Index", new IndexAnnotation(new IndexAttribute("IX_Unique", 2) { IsUnique = true }));

// Properties
Property(e => e.Name).IsRequired().HasMaxLength(512);

// Table & Column Mappings
ToTable("Region");

Property(e => e.Id).HasColumnName("Id");
Property(e => e.Name).HasColumnName("Name");
Property(e => e.CountryId).HasColumnName("CountryId");

// Relationships
HasMany(t => t.Subscriptions)
.WithMany(t => t.Regions);

HasMany(t => t.OpenApplications)
.WithMany(t => t.Regions);

HasMany(t => t.Offices)
.WithRequired(t => t.Region);

HasMany(t => t.Cities)
.WithRequired(t => t.Region);

HasRequired(t => t.Country).WithMany(t => t.Regions).WillCascadeOnDelete(false);
}
Объект города:

Код: Выделить всё

public class City
{
public Guid Id { get; set; }
public Guid CountryId { get; set; }
public virtual Country Country { get; set; }
public Guid? RegionId { get; set;  }
public virtual Region Region { get; set; }
public string Name { get; set; }
public virtual ICollection AdvertsGeographies { get; set; }
}

public class CityMap()
{
//Primary Key
HasKey(e => e.Id);
Property(e => e.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);

//Unique Index
Property(e => e.Name)
.HasColumnAnnotation("Index", new IndexAnnotation(new IndexAttribute("IX_Unique", 1) { IsUnique = true }));

//Properties
Property(e => e.Name).IsRequired().HasMaxLength(512);

//Table & Column Mappings
ToTable("City");
Property(e => e.Id).HasColumnName("Id");
Property(e => e.Name).HasColumnName("Name");
Property(e => e.CountryId).HasColumnName("CountryId");
Property(e => e.RegionId).HasColumnName("RegionId");

// Relationships
HasRequired(t => t.Country).WithMany(t => t.Cities).WillCascadeOnDelete(false);
HasOptional(t => t.Region).WithMany(t => t.Cities).HasForeignKey(t => t.RegionId);
}
/J
У кого-нибудь есть идеи? Рад любой помощи

Подробнее здесь: https://stackoverflow.com/questions/393 ... s-fluent-a
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»