У меня есть следующая модель, в которой я пытаюсь сделать свойство Notification объекта Request равным нулю или идентификатору уведомления.

Однако я не совсем уверен, как это сопоставить с помощью беглого сопоставления. HasOptional -> WithMany кажется наиболее близким из возможных, но я хотел бы убедиться, что столбец NotificationId в Requests уникален. Как лучше всего добиться этого с помощью беглого картографирования?

public class Request
{
    public int RequestId { get; set; }
    public string Description { get; set; }
    public int? NotificationId { get; set; }
    public virtual Notification Notification { get; set; }
}

public class Notification
{
    public int NotificationId { get; set; }
    public string Description { get; set; }
    public DateTime CreateDate { get; set; }
}

public class RequestMap : EntityTypeConfiguration<Request>
{
    public RequestMap()
    {
        HasKey(x => x.RequestId);
        Property(x => x.Description).IsRequired().HasMaxLength(255);

        HasOptional(x => x.Notification)
            .WithWhat?
    }
}
1
Joe 20 Дек 2018 в 23:00

1 ответ

Лучший ответ

Использования HasOptional (x => x.Notification) достаточно, вам не нужно WithMany

У вас не много Request с одинаковыми Notification

public class Request
{
    public int RequestID { get; set; }
    public string Description { get; set; }
    public int? NotificationId { get; set; }
    public Notification Notification { get; set; }
}

public class Notification
{
    public int NotificationId { get; set; }
    public string Description { get; set; }
    public DateTime CreateDate { get; set; }
}

public class RequestMap : EntityTypeConfiguration<Request>
{
    public RequestMap()
    {
        HasKey(x => x.RequestID);
        Property(x => x.Description).IsRequired().HasMaxLength(255);
        HasOptional(x => x.Notification);
    }
}

И сгенерированная миграция

public partial class initial : DbMigration
{
    public override void Up()
    {
        CreateTable(
            "dbo.Notifications",
            c => new
                {
                    NotificationId = c.Int(nullable: false, identity: true),
                    Description = c.String(),
                    CreateDate = c.DateTime(nullable: false),
                })
            .PrimaryKey(t => t.NotificationId);

        CreateTable(
            "dbo.Requests",
            c => new
                {
                    RequestID = c.Int(nullable: false, identity: true),
                    Description = c.String(nullable: false, maxLength: 255),
                    NotificationId = c.Int(),
                })
            .PrimaryKey(t => t.RequestID)
            .ForeignKey("dbo.Notifications", t => t.NotificationId)
            .Index(t => t.NotificationId);

    }       
    public override void Down()
    {
        DropForeignKey("dbo.Requests", "NotificationId", "dbo.Notifications");
        DropIndex("dbo.Requests", new[] { "NotificationId" });
        DropTable("dbo.Requests");
        DropTable("dbo.Notifications");
    }
}
1
Ahmed Ghoniem 20 Дек 2018 в 22:43