От одного до нуля или одна связь с первым кодом C #

0

Я пытаюсь научиться использовать Code First. На Рисунке 1 вы можете увидеть модель EER, которую я хочу получить из приложения Code First.

Изображение 174551

Теперь я попытался получить тот же результат из своего приложения. Ниже вы можете увидеть модель EER, которой я смог стать из своего приложения (с помощью Reverse Engineering в MySQL Workbench).

Изображение 174551

Как вы можете видеть, у меня есть проблема с созданием от одного до нуля или одного отношения между таблицами "Свойства" и "Основания".

У меня есть абстрактный класс EntityBase

public abstract class EntityBase
{
    public abstract int Id { get; set; }
}

Также класс GenericRepository, который наследует класс EntityBase

public class GenericRepository<T> : IRepository<T> where T : EntityBase

Класс MapDBContext, который наследует класс DbContext. Внутри этого класса вы можете видеть, что метод OnModelCreating является "Override". Внутри этого метода я попытался настроить связь между таблицами "Свойства" и "Земля".

public class MapDBContext : DbContext
{
    public virtual DbSet<Agreements> Agreements { get; set; }
    public virtual DbSet<BuyersRenters> BuyersRenters { get; set; }
    public virtual DbSet<Properties> Properties { get; set; }
    public virtual DbSet<Grounds> Grounds { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Grounds>().HasOptional(s => s.Properties).WithRequired(lu => lu.Grounds);
        base.OnModelCreating(modelBuilder);
    }

    public MapDBContext(string connectionString) : base(connectionString)
    {

    }
}

Ниже приведены два класса первого класса таблиц "Свойства" и "Основы" (ПРИМЕЧАНИЕ: класс свойств является абстрактным):

[Table("eigendommen")]
public abstract class Properties : EntityBase
{
    public override int Id { get; set; }
    [Column("gemeente")]
    [Required]
    public string Town { get; set; }
    [Column("straat")]
    [Required]
    public string Street { get; set; }

    public virtual List<Agreements> Agreements { get; set; }
    public virtual Grounds Grounds { get; set; }
}



[Table("gronden")]
public class Grounds : Properties
{
    [Key]
    public override int Id { get; set; }
    [Column("opp")]
    public double? Surface { get; set; }
    [Column("type")]
    [EnumDataType(typeof(TypeNames))]
    [Required]
    public TypeNames Types { get; set; }

    public virtual Properties Properties { get; set; }
}

Может ли кто-нибудь помочь мне с тем, что я делаю неправильно? Я искал часы, пытался с атрибутом 'required', с '?' чтобы сделать его нулевым и атрибутом "ForeignKey". Но все эти решения дают либо ошибки, либо аналогичную таблицу для той, которая у меня есть сейчас.

  • 1
    Если у вас есть отношение 1: 1, которое иногда может быть 1: 0, тогда вы, вероятно, должны соблюдать правило 4 и 5: удалите эту таблицу. Строго говоря, вы всегда должны использовать почтовый индекс в качестве первичного ключа названия места (потому что это то, что на самом деле). Но практически каждый разработчик БД инстинктивно выписывает как часть Адреса.
  • 1
    Это должно помочь: entityframeworktutorial.net/code-first/…
Показать ещё 1 комментарий
Теги:
entity-framework

1 ответ

1

Чтобы определить один к одному и нуль с кодом сначала С#

если вы хотите иметь один или нулевой адрес для учащегося.

Вы можете следовать приведенному ниже коду

public class Student
{
    public Student() { }
    public int StudentId { get; set; }
    public string StudentName { get; set; }
    public virtual StudentAddress StudentAddress { get; set; }

}

public class StudentAddress
{
    [ForeignKey("Student")]
    public int StudentAddressId { get; set; }
    public string Address1 { get; set; }
    public string Address2 { get; set; }
    public string City { get; set; }
    public int Zipcode { get; set; }
    public string State { get; set; }
    public string Country { get; set; }

    public virtual Student Student { get; set; }
}

вы должны определить OnModelCreating в DbContext, а затем отношение между учеником и учеником.

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    // Configure the primary key for the StudentAddresses
    modelBuilder.Entity<StudentAddress>()
        .HasKey(t => t.StudentAddressId);

    // Map one-to-zero or one relationship
    modelBuilder.Entity<StudentAddress>()
        .HasRequired(t => t.Student)
        .WithOptional(t => t.StudentAddress);

 }

Ещё вопросы

Сообщество Overcoder
Наверх
Меню