实体框架,关系

时间:2016-09-15 13:18:47

标签: entity-framework ef-fluent-api

我有以下实体:

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

使用fulent API OnModelCreating

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

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

它创建了一个从Tenant到SQLDatabase的一对一关系,这是可以的,但是当我在SSMS中看到这个关系时,这个关系是从Tenant.Id到SQLDatabase.Id

哪个不正确。租户对于创建SQL数据库和存储帐户是必需的,并且在任何一种情况下都是1:1的关系。

1 个答案:

答案 0 :(得分:0)

您应指定 Principal 哪个 Dependent 。尝试下面的内容:

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