首页 > 解决方案 > 访问不在我的域模型中的表列

问题描述

在我的域模型RestaurantOwner中,我添加了public List<Restaurant> Restaurants { get; set; }. 这在我的餐厅表中创建了一个RestaurantOwnerId列。当尝试在代码中访问该表时,我可以访问我的Restaurant表的所有属性,当然除了RestaurantOwnerId,因为那不在我的Restaurant域模型中。

我认为这很明显,我可以将RestaurantOwnerId作为道具添加到我的Restaurant域模型中,但它似乎发生了更多变化并且与我的外键混淆。

访问此列的干净方法是什么?

谢谢!

public class Restaurant
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string City { get; set; }
}

public class RestaurantOwner : IdentityUser
{
    [MaxLength(100)]
    public string FirstName { get; set; }
    [MaxLength(100)]
    public string LastName { get; set; }
    public DateTime DateOfBirth { get; set; }
    public List<Restaurant> Restaurants { get; set; }
}

标签: asp.netasp.net-mvcentity-frameworkef-code-first

解决方案


您可以做的最好的事情是尝试删除现有关系并再次正确添加关系。要删除关系,请public List<Restaurant> Restaurants { get; set; }从中删除RestaurantOwner。然后创建迁移。

Afterwords 再次创建关系如下。(在使用 efcore 进行一对多关系时有很多约定,这是其中之一。您遵循的是另一种约定。看看。)

public class Restaurant
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string City { get; set; }
    public string RestaurantOwnerId { get; set; }
    public RestaurantOwner RestaurantOwner { get; set; }
}

public class RestaurantOwner : IdentityUser
{
    [MaxLength(100)]
    public string FirstName { get; set; }
    [MaxLength(100)]
    public string LastName { get; set; }
    public DateTime DateOfBirth { get; set; }
    public ICollection<Restaurant> Restaurants { get; set; }
}

然后创建迁移并更新数据库。确保通过OnDelete采用DeleteBehaviour枚举的方法使用 Fluent API 配置引用动作约束。以下示例在删除主体的情况下将依赖实体的外键值设置为 null:

protected override void OnModelCreating(Modelbuilder modelBuilder)
{
    modelBuilder.Entity<RestaurantOwner>()
        .HasMany(c => c.Restaurants)
        .WithOne(e => e.RestaurantOwner).
        .OnDelete(DeleteBehavior.SetNull);
}

推荐阅读