Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# “我的密钥”属性不是Guid类型,而是包含Guid的自定义引用类型_C#_Entity Framework_Domain Driven Design - Fatal编程技术网

C# “我的密钥”属性不是Guid类型,而是包含Guid的自定义引用类型

C# “我的密钥”属性不是Guid类型,而是包含Guid的自定义引用类型,c#,entity-framework,domain-driven-design,C#,Entity Framework,Domain Driven Design,我有一个域模型,比如说Contract在这个类中我有Id属性,但这不是一个简单的Guid类型,而是一个Contract类型 public class Contract { public ContractId Id {get; set; } } 在我的代码中的其他地方: public class ContractId { public Guid Id { get; set; } public ContractId(){} public ContractId(

我有一个域模型,比如说
Contract
在这个类中我有
Id
属性,但这不是一个简单的
Guid
类型,而是一个
Contract
类型

public class Contract 
{
    public ContractId Id {get; set; }
}
在我的代码中的其他地方:

public class ContractId 
{
    public Guid Id { get; set; }

    public ContractId(){}
    public ContractId(Guid id){ Id=id; }
}
现在在我的DbContext中,我需要说明哪些属性是我的key属性

modelBuilder.Entity<Contract>()
.HasKey(k => k.Id)
.ToTable("Contract", "Catalog");
modelBuilder.Entity()
.HasKey(k=>k.Id)
.ToTable(“合同”、“目录”);
虽然我没有编译时错误,但在运行时这会很恼火,因为我不能使用
construcd
作为键属性。然后我想指定
HasKey(k=>k.Id.Id)
,因为这是一个有效的Guid,但仍然有一个问题。我能做什么?

您不能在实体中使用as
键。毫无疑问,这是一个。实体的键必须是基元类型,并且必须在同一个类中声明。最常见的是,键成员是
int
GUID
类型,尽管任何基元类型都可以用作键属性

modelBuilder.Entity<Contract>()
.HasKey(k => k.Id)
.ToTable("Contract", "Catalog");