i有以下两个实体定义。ResponseSeries
可以具有相关的TabletUserSession
。这是一种相当直接的一到零或一关系的关系。
public class ResponseSeries : TrackedEntity
{
public ResponseSeries()
{
Responses = new Collection<Response>();
}
public Int32 ResponseSeriesId { get; set; }
public virtual TabletUserSession TabletUserSession { get; set; }
public virtual ICollection<Response> Responses { get; set; }
}
和
public class TabletUserSession : TrackedEntity
{
public Int32 TabletUserSessionId { get; set; }
public Int32 ResponseSeriesId { get; set; }
public Int32? TabletId { get; set; }
public DateTime StartDate { get; set; }
public DateTime? ClosedDate { get; set; }
public virtual Tablet Tablet { get; set; }
public virtual ResponseSeries ResponseSeries { get; set; }
}
我像这样配置映射:
public TabletUserSessionMap()
{
HasRequired(tus => tus.ResponseSeries).WithOptional(rs => rs.TabletUserSession);
}
当我尝试创建一个新的ResponseSeries
和一个新的TabletUserSession
时,例如:
responseSeries.TabletUserSession = new TabletUserSession
{
StartDate = DateTime.Now,
TabletId = request.TabletId,
};
context.ResponseSeries.Add(responseSeries);
context.SaveChanges();
插入TabletUserSession
时会出现错误,因为EF试图将ResponseSeriesId
插入TabletUserSessionId
。
INSERT [dbo].[TabletUserSession]
([TabletUserSessionId],
[ResponseSeriesId],
[TabletId],
[StartDate],
[ClosedDate],
[Version],
[CreatedUserId],
[CreatedDate],
[LastUpdateUserId],
[LastUpdateDate])
VALUES (4404 /* @0 */, -- <--This is going into the wrong field!
0 /* @1 */,
9 /* @2 */,
'2014-03-06T13:30:03' /* @3 */,
NULL,
1 /* @4 */,
'801162722' /* @5 */,
'2014-03-06T13:30:03' /* @6 */,
'801162722' /* @7 */,
'2014-03-06T13:30:03' /* @8 */)
我在这里结束。我尝试以各种方式更改映射,但是我所能做的就是让它提出不同的例外。我没有看到什么?
对于存在一对一的关系。两个实体上的主要键是相同的。
在依赖表上,主要键也是相关实体的外键。
在您的示例中:
public class ResponseSeries : TrackedEntity
{
public ResponseSeries()
{
Responses = new Collection<Response>();
}
public Int32 ResponseSeriesId { get; set; }
public virtual TabletUserSession TabletUserSession { get; set; }
public virtual ICollection<Response> Responses { get; set; }
}
public class TabletUserSession : TrackedEntity
{
// this should not exist
public Int32 TabletUserSessionId { get; set; }
// this should be the primary key of this entity
// it is also the foreign key to the ResponseSeriesId
public Int32 ResponseSeriesId { get; set; }
public Int32? TabletId { get; set; }
public DateTime StartDate { get; set; }
public DateTime? ClosedDate { get; set; }
public virtual Tablet Tablet { get; set; }
public virtual ResponseSeries ResponseSeries { get; set; }
}
响应式行为是主要键,是关系中的prinicpal实体。在这种情况下,tabletusersession实体的主要关键需要是响应式响应。它没有自己的身份,因为它实际上不是一个或一个或一个。