弹性框架 类型中的每个属性名称必须是唯一的



我定义了以下实体和关系映射。但是,在保存时,我在EF 6中收到错误Name: Each property name in a type must be unique. Property name 'ResponseId' is already defined.

System.Data.Entity.ModelConfiguration.ModelValidationException

我被这个打击了 2 天,不确定,我的班级有什么问题。如果我删除ResponseOffer中的ResponseId,它工作正常。但是,我需要设置此值以将其保存在数据库及其 FK 中

请求可能包含许多响应,每个响应可能包含许多响应提议。

[Table("Response")]
public class Response : AggregateRoot // AggregateRoot is an Entity
{
public Response(Request Request): this()
{
ResponseId = Guid.NewGuid();
Request = Request;
MaterialId = Request.MaterialId;           
}
public Response()
{
}
public Response(Guid ResponseId)
{
ResponseId = ResponseId;
}
public Response(Guid ResponseId, Request Request)
{
ResponseId = ResponseId;
Request = Request;            
}
public Guid ResponseId { get; private set; }     
public virtual Request Request { get; set; }
public bool IsActiveVersion { get; set; }
public EntityHashSet<ResponseOffer> EditableResponseOffers => (EntityHashSet<ResponseOffer>)ResponseOffers;
}

然后

[Table("ResponseOffer")]
public class ResponseOffer : Entity
{
public ResponseOffer()
{
}
public ResponseOffer(Response response)
{
ResponseOfferId = Guid.NewGuid();
Response = response;            
}
public Guid ResponseOfferId { get; set; }
public string RequestItemId { get; set; }
public Guid ResponseId { get; set; }
public decimal Price { get; set; }
public decimal Quantity { get; set; }      
public string Comment { get; set; }
public virtual Response Response { get; set; }
}

映射

modelBuilder.Entity<Response>()
.HasRequired(e => e.Request)
.WithMany(e => e.Responses)
.WillCascadeOnDelete(false);         
modelBuilder.Entity<Response>()
.HasMany(e => e.ResponseOffers)
.WithRequired(e => e.Response)
.WillCascadeOnDelete(false);

更新:

我已经删除了以下属性,现在我没有收到相同的错误。但是,EF 在插入时添加了额外的列Response_ResponseId1

INSERT [dbo].[ResponseOffer]([ResponseOfferId],  [RequestItemId], 
[Price], [Quantity], [Comment], [ResponseId], [Response_ResponseId1])

我不确定,但是,我会尝试使用虚拟设置"可编辑响应报价"属性 并通过删除 ResponseId 的私有来测试行为。

public Guid ResponseId { get; set; }
public virtual EntityHashSet<ResponseOffer> EditableResponseOffers => (EntityHashSet<ResponseOffer>)ResponseOffers;

最新更新