Entity Framework, 关系

Entity Framework, Relationship

我有以下实体:

public class BaseEntity
{
    [Key]
    public long Id { get; set; }
}
public class Tenant : BaseEntity
{
    public virtual Nullable<long> SQLDatabaseId { get; set; }
    public virtual SQLDatabase SQLDatabase { get; set; }
    public virtual Nullable<long> StorageAccountId { get; set; }
    public virtual StorageAccount StorageAccount { get; set; }
}
public class SQLDatabase : BaseEntity
{
    public virtual long TenantId { get; set; }        
    public virtual Tenant Tenant { get; set; }
}
public class StorageAccount : BaseEntity
{
    public virtual long TenantId { get; set; }
    public virtual Tenant Tenant { get; set; }
}

并且在 OnModelCreating 中 API

modelBuilder.Entity<SQLDatabase>()
    .HasRequired(r => r.Tenant);
modelBuilder.Entity<StorageAccount>()
    .HasRequired(r => r.Tenant);

现在当我运行项目时,它以奇怪的方式创建数据库

它创建了从租户到 SQL 数据库的一对一关系,这没问题,但是当我在 SSMS 中看到它时,这种关系是从 Tenant.Id 到 SQLDatabase.Id

这不是真的。必须有租户才能创建 SQL 数据库和存储帐户,并且在任何一种情况下关系都是 1:1。

您应该指定哪个是 Principal,哪个是 Dependent。尝试以下:

modelBuilder.Entity<SQLDatabase>()
    .HasRequired(r => r.Tenant)
    .WithRequiredDependent(m => m.SQLDatabase);
modelBuilder.Entity<StorageAccount>()
    .HasRequired(r => r.Tenant)
    .WithRequiredDependent(m => m.StorageAccount);