У меня есть два следующих класса:
public class Record
{
public int RecordId { get; set; }
public DateTime? InsertDate { get; set; } = DateTime.Now;
public DateTime BookingDate { get; set; }
public string AmountTypeName { get; set; }
public double? Amount { get; set; }
public string BookingAccountID { get; set; }
public string AccountCurrency { get; set; }
public string ClientCurrency { get; set; }
public string AffectsBalance { get; set; }
public double? AmountAccountCurrency { get; set; }
public string AmountClientCurrency { get; set; }
public int UnifiedInstrumentCode { get; set; }
public InstrumentInfo InstrumentInfo { get; set; }
}
public class InstrumentInfo
{
[Key]
public int UnifiedInstrumentCode { get; set; }
public ICollection<Record> Record { get; set; }
public string AssetType { get; set; }
public int UnderlyingInstrumentUic { get; set; }
public string UnderlyingInstrumentSubType { get; set; }
public string InstrumentSymbol { get; set; }
public string InstrumentDescription { get; set; }
public string InstrumentSubType { get; set; }
public string UnderlyingInstrumentAssetType { get; set; }
public string UnderlyingInstrumentDescription { get; set; }
public string UnderlyingInstrumentSymbol { get; set; }
}
, которые я хочу использовать в качестве контекста для EF6.
Я определил контекст следующим образом:
public class TransactionsContext: DbContext
{
public DbSet<Record> Records { get; set; }
public DbSet<InstrumentInfo> InstrumentInfos { get; set; }
public TransactionsContext()
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
Database.SetInitializer<TransactionsContext>(null);
base.OnModelCreating(modelBuilder);
}
}
Если я запускаю тест против него, который добавит и объект InstrumentInfo к БД
[TestMethod]
public void AddInstrumentInfo_Added_IsTrue()
{
InstrumentInfo info = FakeFactory.GetInstrumentInfo();
using (var ctx = new TransactionsContext())
{
ctx.InstrumentInfos.Add(info);
ctx.SaveChanges();
}
}
, я получу следующее исключение:
SqlException: Невозможно вставить значение NULL в столбец «UnifiedInstrumentCode», таблица «TransactionsContext.dbo.InstrumentInfoes»; столбец не допускает пустых значений. Вставить не удается. Утверждение было прекращено.
Я перепробовал все различные сценарии ios, которые я нашел здесь , но я не мог понять, что я делаю неправильно.
Конечная цель состоит в том, чтобы я определил два моих класса таким образом, чтобы «Запись» была связана с таблицей «InstrumentInfo» через свойство «UnifiedInstrumentCode». Я предполагаю, что мои ограничения для этих двух таблиц все еще не верны, но я не могу понять, как определить это в EF6 (сначала код), чтобы это работало.