在多租户应用程序中,我们可以强制输入
中另一个租户中的ID在SQL Server中,我解析如下:
CREATE TABLE tenant (
id INT NOT NULL,
nome VARCHAR(255) NOT NULL,
PRIMARY KEY (id)
);
CREATE TABLE customer (
id INT NOT NULL,
id_tenant INT NOT NULL,
nome VARCHAR(255) NOT NULL,
PRIMARY KEY (id),
FOREIGN KEY (id_tenant) REFERENCES tenant(id),
-- pra ter a FK composta, tem que ter chave composta na tabela de origem
UNIQUE (Id,id_tenant)
);
CREATE TABLE [order] (
id INT NOT NULL,
id_customer INT NOT NULL,
id_tenant INT NOT NULL,
nome VARCHAR(255) NOT NULL,
PRIMARY KEY (id),
FOREIGN KEY (id_customer, id_tenant) REFERENCES customer (id, id_tenant),
FOREIGN KEY (id_tenant) REFERENCES tenant(id)
);
我如何使用我的模型进行映射? 如何使用上面的SQL生成我的模型?使用Code First?
public class Tenant
{
public int Id { get; set; }
public string Name { get; set; }
}
public class Customer
{
public int Id { get; set; }
public int TenantId { get; set; }
public string Name { get; set;}
}
public class Order
{
public int Id { get; set; }
public int CustomerId { get; set; }
public int TenantId { get; set; }
public float Price { get; set; }
}
答案 0 :(得分:1)
我认为你要找的是这样的模型:
public class Tenant
{
[Key]
public int Id { get; set; }
[Required]
public string Name { get; set; }
}
public class Customer
{
[Key,Column(Order = 0)]
public int Id { get; set; }
[Key,ForeignKey("Tenant"), Column(Order = 1)]
public int TenantId { get; set; }
[Required]
public string Name { get; set; }
public virtual Tenant Tenant { get; set; }
}
public class Order
{
[Key]
public int Id { get; set; }
[ForeignKey("Customer"), Column(Order = 0)]
public int CustomerId { get; set; }
[ForeignKey("Customer"), Column(Order = 1)]
public int TenantId { get; set; }
public decimal Price { get; set; }
public virtual Customer Customer { get; set; }
}
如果您想了解我在此模型中使用的注释,您可以查看link
是的,您可以在实体中添加多个FK属性作为其他关系配置的一部分,例如,假设您要将客户与组关联:
public class Group
{
public int Id { get; set; }
[Required]
public string Name { get; set; }
public virtual ICollection<Customer> Customers {get ; set;}
}
然后,在您的Customer
课程中,您可以将FK属性添加到组表中。加上这个:
public class Customer
{
//...
[ForeignKey("Group")
public int GroupId { get; set; }
public virtual Group Group { get; set; }
}