Entity framework 创建复合密钥和唯一安全多租户
在多租户应用程序中,我们可以强制输入另一个租户中的ID 在SQL Server中,我解析如下:Entity framework 创建复合密钥和唯一安全多租户,entity-framework,entity-framework-6,Entity Framework,Entity Framework 6,在多租户应用程序中,我们可以强制输入另一个租户中的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 N
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生成我的模型?先用代码
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; }
}
我想你想要的是这样一个模型:
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; }
}
如果您想了解我在这个模型中使用的注释,可以检查以下内容
更新
是的,作为其他关系配置的一部分,您可以在实体中具有多个FK属性,例如,假设您希望将客户与组关联:
public class Group
{
public int Id { get; set; }
[Required]
public string Name { get; set; }
public virtual ICollection<Customer> Customers {get ; set;}
}
谢谢,这个想法是不允许添加客户,如果它没有相同的租户,并且如果我除了customerId之外还有其他属性?没错,拥有复合PKs可以确保您不会有具有相同“租户ID”的客户。“拥有另一个属性”是什么意思?例如,我有CustomerId,在property TenantId中使用ForeignKey(客户),如果是其他属性?groupId,otherIdIn int TenantId我可以有多个foreingkey吗?对不起,我的englishHello@Rod,查看更新,我希望这是您的要求
public class Customer
{
//...
[ForeignKey("Group")
public int GroupId { get; set; }
public virtual Group Group { get; set; }
}