我正在尝试使用ObjectContext.AddObject
将一个ProfileProperty
添加到ProfileProperties
表中。
ProfileProperties
表的db
字段为:
ProfilePropertyID
ProfilePropertyDefinitionID
UserID
PropertyValue
ProfilePropertyDefinitions
表中的db
字段为:
ProfilePropertyDefinitionID
PropertyName
ProfileProperty
对象的变量如下:ProfilePropertyID
ProfilePropertyDefinition
User
PropertyValue
ProfilePropertyDefinitionID
和UserID
都是外键,因此在创建ProfileProperty
对象后,我从它们的表中选择User
和ProfilePropertyDefinition
来填充相关对象以填充ProfileProperty
。然后,当我尝试使用这些变量传递一个对象进行
AddObject
时,会出现错误:
我打了一个断点来检查传入的对象持有什么,结果如下:InnerException = {"无法将值NULL插入到列“PropertyName”中,表“mydbserver.dbo.ProfilePropertyDefinitions”不允许空值。插入失败。\r\n已终止该语句。"}
ProfilePropertyID = -1
ProfilePropertyDefinition =
{ ProfilePropertyDefinitionID = 3
PropertyName = "First Name" }
User = /*Not going to put details here, but assume the user object is there*/
PropertyValue = "Matt"
问题
- 当
PropertyName
存在时,为什么会说它为null? - 为什么它要将
ProfilePropertyDefinition
对象添加到ProfilePropertyDefinitions
表中?(我不想添加或更新相关对象)
服务层AddProfile()
public int AddProfile(ProfilePropertyViewModel property)
{
int objId = -1;
ProfileProperty profile = null;
if (ValidateProfile(property))
{
try
{
using (DbTransaction transaction = _profileRepository.BeginTransaction())
{
profile = ProfilePropertyTranslator.ViewToDomain(property);
profile.User = _userRepository.SelectByKey(UserColumns.UserName, property.UserName);
profile.ProfilePropertyDefinitionReference.EntityKey = new EntityKey("GraffytysDBEntities.ProfilePropertyDefinition", "ProfilePropertyDefinitionID", property.ProfilePropertyDefinitionID);
_profileRepository.Add(profile);
if (_profileRepository.Save() >= 0)
{
transaction.Commit();
objId = property.ProfilePropertyId;
}
}
}
catch(Exception ex)
{
throw ex;
}
}
return objId;
}
代码库 Add()
方法:
public void Add(E entity)
{
_ctx.AddObject(entity.GetType().Name, entity);
}
ProfilePropertyDefinitionReference.EntityKey
和UserReference.EntityKey
。你不需要先从数据库中选择它,这可能会解决你的问题。 - LukLed