Я использую Entity Framework для заполнения таблицы базы данных SQL.Мой объект 'WebcpdActivity' имеет свойство 'OwnerIdDsc', которое является целым числом.Это заполняется (вместе со всеми другими свойствами) значением незадолго до сохранения в базе данных:
WebcpdActivity.OwnerIdDsc = 0;
webContext.CPDActivities.Add(WebcpdActivity);
webContext.SaveChanges();
В точке SaveChanges я получаю ошибку:
Невозможно вставить значение NULL в столбец OwnerIdDsc, таблица «CPDActivityRecord.dbo.CPDActivity»;столбец не допускает пустых значений.Вставить не удается.Оператор был прерван.
Когда я выполняю шаг в коде в точке SaveChanges, свойство WebcpdActivity.OwnerIdDsc действительно равно '0', а не 'NULL'.

РЕДАКТИРОВАТЬ 1 *: (снова отредактировано для добавления правильной версии) Класс 'CPDActivity', в котором 'WebcpdActivity' является экземпляром
public partial class CPDActivity
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public CPDActivity()
{
this.CPDActivityExtendeds = new HashSet<CPDActivityExtended>();
}
public string ModifiedByName { get; set; }
public string ModifiedByYomiName { get; set; }
public string sb_cqmoduleidName { get; set; }
public string sb_eventdateidName { get; set; }
public string sb_MemberContactIdYomiName { get; set; }
public string sb_MemberContactIdName { get; set; }
public string CreatedOnBehalfByName { get; set; }
public string CreatedOnBehalfByYomiName { get; set; }
public string ModifiedOnBehalfByName { get; set; }
public string ModifiedOnBehalfByYomiName { get; set; }
public string CreatedByName { get; set; }
public string CreatedByYomiName { get; set; }
public System.Guid OwnerId { get; set; }
public string OwnerIdName { get; set; }
public string OwnerIdYomiName { get; set; }
public int OwnerIdDsc { get; set; }
public Nullable<int> OwnerIdType { get; set; }
public Nullable<System.Guid> OwningUser { get; set; }
public Nullable<System.Guid> OwningTeam { get; set; }
public System.Guid sb_cpdactivityId { get; set; }
public Nullable<System.DateTime> CreatedOn { get; set; }
public Nullable<System.Guid> CreatedBy { get; set; }
public Nullable<System.DateTime> ModifiedOn { get; set; }
public Nullable<System.Guid> ModifiedBy { get; set; }
public Nullable<System.Guid> CreatedOnBehalfBy { get; set; }
public Nullable<System.Guid> ModifiedOnBehalfBy { get; set; }
public Nullable<System.Guid> OwningBusinessUnit { get; set; }
public int statecode { get; set; }
public Nullable<int> statuscode { get; set; }
public byte[] VersionNumber { get; set; }
public Nullable<int> ImportSequenceNumber { get; set; }
public Nullable<System.DateTime> OverriddenCreatedOn { get; set; }
public Nullable<int> TimeZoneRuleVersionNumber { get; set; }
public Nullable<int> UTCConversionTimeZoneCode { get; set; }
public string sb_name { get; set; }
public Nullable<System.DateTime> sb_ActivityDate { get; set; }
public Nullable<bool> sb_confirmedbysupervisor { get; set; }
public Nullable<decimal> sb_CPDHours { get; set; }
public Nullable<decimal> sb_CPDPoints { get; set; }
public string sb_FutureDevelopment { get; set; }
public Nullable<System.DateTime> sb_FutureDevelopmentTargetDate { get; set; }
public string sb_ReflectedOutcome { get; set; }
public Nullable<int> sb_StructuredCPD { get; set; }
public Nullable<int> sb_type { get; set; }
public Nullable<int> sb_UnstructuredCPD { get; set; }
public Nullable<System.Guid> sb_MemberContactId { get; set; }
public Nullable<System.Guid> sb_cqmoduleid { get; set; }
public Nullable<System.Guid> sb_eventdateid { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<CPDActivityExtended> CPDActivityExtendeds { get; set; }
public static explicit operator CPDActivity(sb_cpdactivity v)
{
CPDActivity sb_cpda = new CPDActivity();
sb_cpda.ModifiedByName = v.ModifiedByName;
sb_cpda.ModifiedByYomiName = v.ModifiedByYomiName;
sb_cpda.sb_cqmoduleidName = v.sb_cqmoduleidName;
sb_cpda.sb_eventdateidName = v.sb_eventdateidName;
sb_cpda.sb_MemberContactIdYomiName = v.sb_MemberContactIdYomiName;
sb_cpda.sb_MemberContactIdName = v.sb_MemberContactIdName;
sb_cpda.CreatedOnBehalfByName = v.CreatedOnBehalfByName;
sb_cpda.CreatedOnBehalfByYomiName = v.CreatedOnBehalfByYomiName;
sb_cpda.ModifiedOnBehalfByName = v.ModifiedOnBehalfByName;
sb_cpda.ModifiedOnBehalfByYomiName = v.ModifiedOnBehalfByYomiName;
sb_cpda.CreatedByName = v.CreatedByName;
sb_cpda.CreatedByYomiName = v.CreatedByYomiName;
sb_cpda.OwnerId = v.OwnerId;
sb_cpda.OwnerIdName = v.OwnerIdName;
sb_cpda.OwnerIdYomiName = v.OwnerIdYomiName;
sb_cpda.OwnerIdDsc = v.OwnerIdDsc;
sb_cpda.OwnerIdType = v.OwnerIdType;
sb_cpda.OwningUser = v.OwningUser;
sb_cpda.OwningTeam = v.OwningTeam;
sb_cpda.sb_cpdactivityId = v.sb_cpdactivityId;
sb_cpda.CreatedOn = v.CreatedOn;
sb_cpda.CreatedBy = v.CreatedBy;
sb_cpda.ModifiedOn = v.ModifiedOn;
sb_cpda.ModifiedBy = v.ModifiedBy;
sb_cpda.CreatedOnBehalfBy = v.CreatedOnBehalfBy;
sb_cpda.ModifiedOnBehalfBy = v.ModifiedOnBehalfBy;
sb_cpda.OwningBusinessUnit = v.OwningBusinessUnit;
sb_cpda.statecode = v.statecode;
sb_cpda.statuscode = v.statuscode;
sb_cpda.VersionNumber = v.VersionNumber;
sb_cpda.ImportSequenceNumber = v.ImportSequenceNumber;
sb_cpda.CreatedOn = v.CreatedOn;
sb_cpda.TimeZoneRuleVersionNumber = v.TimeZoneRuleVersionNumber;
sb_cpda.UTCConversionTimeZoneCode = v.UTCConversionTimeZoneCode;
sb_cpda.sb_name = v.sb_name;
sb_cpda.sb_ActivityDate = v.sb_ActivityDate;
sb_cpda.sb_confirmedbysupervisor = v.sb_confirmedbysupervisor;
sb_cpda.sb_CPDHours = v.sb_CPDHours;
sb_cpda.sb_CPDPoints = v.sb_CPDPoints;
sb_cpda.sb_FutureDevelopment = v.sb_FutureDevelopment;
sb_cpda.sb_FutureDevelopmentTargetDate = v.sb_FutureDevelopmentTargetDate;
sb_cpda.sb_ReflectedOutcome = v.sb_ReflectedOutcome;
sb_cpda.sb_StructuredCPD = v.sb_StructuredCPD;
sb_cpda.sb_type = v.sb_type;
sb_cpda.sb_UnstructuredCPD = v.sb_UnstructuredCPD;
sb_cpda.sb_MemberContactId = v.sb_MemberContactId;
sb_cpda.sb_cqmoduleid = v.sb_cqmoduleid;
sb_cpda.sb_eventdateid = v.sb_eventdateid;
return sb_cpda;
}
}
РЕДАКТИРОВАТЬ 2
добавлен весь блок Using
using (CPDWebContext webContext = new CPDWebContext())
{
Guid activityId = Guid.NewGuid();
sb_cpdactivity blankSb_cpdactivity = new sb_cpdactivity();
blankSb_cpdactivity = getCPDData.populateActivtyMetaData(blankSb_cpdactivity);
CPDActivity WebcpdActivity = new CPDActivity();
WebcpdActivity = (CPDActivity)blankSb_cpdactivity;
WebcpdActivity.sb_cpdactivityId = activityId;
WebcpdActivity.CreatedOn = DateTime.Now;
WebcpdActivity.ModifiedOn = DateTime.Now;
WebcpdActivity.statecode = 0;
WebcpdActivity.statuscode = 1;
WebcpdActivity.sb_MemberContactId = bsavaMember.MemberID;
decimal minutes = decimal.Parse(ddl_minutes.SelectedValue);
WebcpdActivity.sb_CPDHours = decimal.Parse(tb_hours.Text) + minutes;
WebcpdActivity.sb_name = tb_title.Text;
WebcpdActivity.sb_ActivityDate = Convert.ToDateTime(DateTime.ParseExact(tb_date.Text, "dd-MM-yyyy", CultureInfo.InvariantCulture));
lbl_notification.Text = bsavaMember.UserName + ",\r\n" + bsavaMember.MemberNumber + ",\r\n" + bsavaMember.MemberID + ",\r\n" + WebcpdActivity.sb_ActivityDate.ToString();
CPDActivityExtended cpdActivityExtended = new CPDActivityExtended();
cpdActivityExtended.SubjectArea = tb_area.Text;
cpdActivityExtended.Notes = tb_notes.Text;
cpdActivityExtended.Location = tb_location.Text;
cpdActivityExtended.Username = bsavaMember.UserName;
cpdActivityExtended.MemberNumber = bsavaMember.MemberNumber;
cpdActivityExtended.ContactId = bsavaMember.MemberID;
cpdActivityExtended.CPDActivityId = activityId;
cpdActivityExtended.id = Guid.NewGuid();
cpdActivityExtended.ActiveRecord = 1;
// testing
int test = WebcpdActivity.OwnerIdDsc;
WebcpdActivity.OwnerIdDsc = 1;
//
webContext.CPDActivities.Add(WebcpdActivity); // error triggered here
webContext.CPDActivityExtendeds.Add(cpdActivityExtended);
try
{
webContext.SaveChanges();
}
catch (Exception exc)
{
string error = exc.Message.ToString();
}
}
EDIT 3
Я пытался сохранить код в тех областях, которые мне хоть и актуальны, но, похоже, эта проблема может быть немного более сложной, чемизначально думал.В принципе;у нас есть установка Microsoft CRM, в которой есть таблица, которая нам необходима для репликации, и мы только обновляем реплицированную таблицу и дополняем ее следующей таблицей.Эта таблица была реплицирована без каких-либо ключевых ограничений, но с типами данных и ограничениями данных.Таким образом, в основном таблица A (sb_cpdactivity) в базе данных A была реплицирована как таблица B (CPDActivity) в базе данных B, и я добавил таблицу C (CPDActivityExtended) в базу данных B.
Идея, которую мы читаем из оригинала, ноНЕ сохранить на нем.Поэтому, когда мы сохраняем или создаем новую запись, мы делаем это только для таблицы NEW (Таблица B, C База данных B). Следовательно, существует способ преобразования между оригиналом и дубликатом, если это необходимо).
Таблицы B и C являются автономными таблицами в своей собственной базе данных.Таблица C имеет внешний ключ, который является первичным ключом таблицы B. WebContext подключается только к этой базе данных.
Надеюсь, это имеет смысл.