Dual Self Reference в EF6 и. NET 4.7.2 MVC проекте - PullRequest
0 голосов
/ 14 апреля 2020

Я знаю, что эта тема обсуждается очень подробно, но, похоже, ничего из этого не помогло, так как у меня все еще возникают проблемы с "Невозможно определить основной конец ассоциации между типами" SupportSite.Core.User "и" SupportSite.Core.User '. Основной конец этой ассоциации должен быть явно настроен с использованием либо API-интерфейса, обеспечивающего свободное взаимодействие, либо аннотаций данных. "

Единственное, что заставляет его работать, - это если я добавляю аннотацию NotMapped на пользователя properties.

Существует BaseItemEntity:

public class BaseItemEntity
{
    [Key, Column(Order = 0)]
    public Guid ID { get; set; }

    public DateTimeOffset CreatedDate { get; set; }
    public DateTimeOffset ModifiedDate { get; set; }

    [ForeignKey("CreatedUser")]
    public Guid? CreatedUserID { get; set; }
    public virtual User CreatedUser { get; set; }

    [ForeignKey("ModifiedUser")]
    public Guid? ModifiedUserID { get; set; }
    public virtual User ModifiedUser { get; set; }
}

public class User : BaseItemEntity // Inherits the above class
{
    private UserPermissions _permissions;

    public UserPermissions Permissions
    {
        get => _permissions;
        set => _permissions = value;
    }

    public Company Company { get; set; } // 'Company' inherits BaseItemEntity as well.
}

Как в этом примере: Двойная собственная ссылка в Entity Framework , но, похоже, это не работает.

Попытка сделать пример здесь: Как иметь две самоссылки в классе сущности , и это не работает.

Я надеюсь, что смогу достичь чего-то, что могло бы перейти на что-то вроде того, когда я запускаю: PM> EntityFramework6\Add-Migration Initial

public partial class Initial : DbMigration
{
    public override void Up()
    {
        CreateTable(
            "dbo.Users",
            c => new
                {
                    ID = c.Guid(nullable: false),
                    Permissions = c.Int(nullable: false),
                    CreatedDate = c.DateTimeOffset(nullable: false, precision: 7),
                    ModifiedDate = c.DateTimeOffset(nullable: false, precision: 7),
                    CreatedUserID = c.Guid(),
                    ModifiedUserID = c.Guid(),
                    Company_ID = c.Guid(),
                })
            .PrimaryKey(t => t.ID)
            .ForeignKey("dbo.Companies", t => t.Company_ID)
            .ForeignKey("dbo.Users", t => t.CreatedUserID)
            .ForeignKey("dbo.Users", t => t.ModifiedUserID)
            .Index(t => t.Company_ID);

        CreateTable(
            "dbo.Companies",
            c => new
            {
                ID = c.Guid(nullable: false),
                CreatedDate = c.DateTimeOffset(nullable: false, precision: 7),
                ModifiedDate = c.DateTimeOffset(nullable: false, precision: 7),
                CreatedUserID = c.Guid(),
                ModifiedUserID = c.Guid(),
            })
            .PrimaryKey(t => t.ID)
            .ForeignKey("dbo.Users", t => t.CreatedUserID)
            .ForeignKey("dbo.Users", t => t.ModifiedUserID);



        CreateTable(
            "dbo.Projects",
            c => new
                {
                    ID = c.Guid(nullable: false),
                    CreatedDate = c.DateTimeOffset(nullable: false, precision: 7),
                    ModifiedDate = c.DateTimeOffset(nullable: false, precision: 7),
                    CreatedUserID = c.Guid(),
                    ModifiedUserID = c.Guid(),
                    Company_ID = c.Guid(),
                })
            .PrimaryKey(t => t.ID)
            .ForeignKey("dbo.Companies", t => t.Company_ID)
            .ForeignKey("dbo.Users", t => t.CreatedUserID)
            .ForeignKey("dbo.Users", t => t.ModifiedUserID)
            .Index(t => t.Company_ID);

        CreateTable(
            "dbo.ProjectItems",
            c => new
                {
                    ID = c.Guid(nullable: false),
                    CreatedDate = c.DateTimeOffset(nullable: false, precision: 7),
                    ModifiedDate = c.DateTimeOffset(nullable: false, precision: 7),
                    CreatedUserID = c.Guid(),
                    ModifiedUserID = c.Guid(),
                    Project_ID = c.Guid(),
                })
            .PrimaryKey(t => t.ID)
            .ForeignKey("dbo.Projects", t => t.Project_ID)
            .ForeignKey("dbo.Users", t => t.CreatedUserID)
            .ForeignKey("dbo.Users", t => t.ModifiedUserID)
            .Index(t => t.Project_ID);

    }

    public override void Down()
    {
        DropForeignKey("dbo.Users", "Company_ID", "dbo.Companies");
        DropForeignKey("dbo.ProjectItems", "Project_ID", "dbo.Projects");
        DropForeignKey("dbo.Projects", "Company_ID", "dbo.Companies");
        DropIndex("dbo.ProjectItems", new[] { "Project_ID" });
        DropIndex("dbo.Projects", new[] { "Company_ID" });
        DropIndex("dbo.Users", new[] { "Company_ID" });
        DropTable("dbo.ProjectItems");
        DropTable("dbo.Projects");
        DropTable("dbo.Companies");
        DropTable("dbo.Users");
    }
}

Как этого добиться без использования [NotMapped] аннотации к свойствам пользователя в BaseItemEn tity?

Спасибо всем, кто может помочь.

Если кому-то нужна ясность, дайте мне знать!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...