与Code#1之间的一对一或零关系#

时间:2018-04-13 22:09:53

标签: c# mysql entity-framework

我试图学习使用Code First。在图1中,您可以看到我希望从我的Code First应用程序中获得的EER模型。

PICTURE 1

现在我试图从我的应用程序中获得相同的结果。下面你可以看到EER模型我已成功从我的应用程序(使用MySQL Workbench中的逆向工程)。

PICTURE 2

正如您所看到的,我在表格之间创建一对一或一对关系时遇到问题'属性'和'理由'

我有一个抽象的EntityBase类

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

还是继承EntityBase类

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

继承DbContext类的MapDBContext类。在这个课程中你可以看到OnModelCreating方法是&#39; Override&#39;。在该方法的内部,我试图配置&#39;属性&#39;和&#39;理由&#39;表。

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)
    {

    }
}

以下是&#39;属性&#39;的两个Code First类。和&#39;理由&#39;表(注意:属性类是抽象的):

[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; }
}

有人可以帮我解决我做错的事吗?我一直在寻找好几个小时,尝试过“必要的”#39;属性,用&#39;?&#39;使其成为可空的并使用&#39; ForeignKey&#39;属性。但是所有这些解决方案都给出了我现在的错误或类似的表格。

1 个答案:

答案 0 :(得分:1)

要使用代码首先C#定义一对一和零

如果您想为学生提供一个或零个地址。

您可以按照下面的代码

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; }
}

您必须在 DbContext 中定义 OnModelCreating ,然后在学生和学生地址之间建立关系。

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);

 }