Это моя первая попытка обновления базы данных с использованием LINQtoSQL. По крайней мере, это мое первое, если не считать учебники, за которыми я следовал. К сожалению, учебники, которые я нашел, предлагают не намного больше, чем обновление одной таблицы. Я пытаюсь обновить модель БД, которая немного сложнее.
У меня есть Stream
таблица:
[Table]
public class Stream
{
[HiddenInput(DisplayValue = false)]
[Column(IsPrimaryKey = true, IsDbGenerated = true, AutoSync = AutoSync.OnInsert)]
public long StreamID { get; set; }
/** Other columns removed for brevity **/
// relationship:
private EntitySet<Stream2FieldTypes> _Stream2FieldTypes;
[System.Data.Linq.Mapping.Association(Storage = "_Stream2FieldTypes", OtherKey = "StreamID")]
public EntitySet<Stream2FieldTypes> Stream2FieldTypes
{
get { return this._Stream2FieldTypes; }
set { this._Stream2FieldTypes.Assign(value); }
}
И у меня есть Stream2FieldTypes
таблица:
[Table]
public class Stream2FieldTypes
{
[Column(IsPrimaryKey = true, IsDbGenerated = true, AutoSync = AutoSync.OnInsert)]
public long s2fID { get; set; }
public long StreamID { get; set; } // FK
/** other columns removed for brevity **/
// relationship (one Stream2FieldTypes to many Streams)
private EntitySet<Stream> _Stream;
[Association(Storage = "_Stream", ThisKey = "StreamID")]
public EntitySet<Stream> Stream
{
get { return this._Stream; }
set { this._Stream.Assign(value); }
}
Теперь я пытаюсь обновить модель, чтобы я мог отправить обновления в хранилище для сохранения на DataContext
. Я не могу обновить Stream.Stream2FieldTypes
, потому что для get
установлено частное EntitySet
.
Как мне обновить Stream.Stream2FieldTypes
, когда я не могу изменить Stream.Stream2FieldTypes
, потому что это частный EntitySet <>?
Редактировать: код псевдо
В принципе, я думаю, что я должен иметь возможность обновлять таблицы Stream
и Stream2FieldTypes
, используя команду в моем действии редактирования, например:
myRepository.SaveStream(stream);
Я пытался сделать что-то вроде этого:
if (ModelState.IsValid)
{
// Convert StreamEditModel to Stream
var stream = new Genesis.Domain.Entities.Stream
{
StreamID = form.StreamID,
StreamUrl = form.StreamUrl,
StreamName = form.StreamName,
StreamBody = form.StreamBody,
StreamTitle = form.StreamTitle,
StreamKeywords = form.StreamKeywords,
StreamDescription = form.StreamDescription,
Stream2FieldTypes = new EntitySet<Stream2FieldTypes>()
};
// Loop to convert Stream2FieldTypes to Steam2FieldTypesEditModel
foreach (var item in form.Stream2FieldTypes)
{
var fieldTypeEntry = new Stream2FieldTypes
{
FieldTypeID = item.FieldTypeID,
s2fID = item.s2fID,
s2fIsRequired = item.s2fIsRequired,
s2fLabel = item.s2fLabel,
StreamID = item.StreamID,
};
stream.Stream2FieldTypes.Add(fieldTypeEntry); // Add to list
}
genesisRepository.SaveStream(stream);
return RedirectToAction("Index");
}
else
{
return View(form);
}
Когда я пытаюсь запустить этот код, я получаю эту ошибку:
Сведения об исключении: System.NullReferenceException: ссылка на объект не установлена для экземпляра объекта.
Ошибка источника:
Строка 58: {
Строка 59: get {return this._Stream2FieldTypes; }
строка с ошибкой: строка 60: set {this._Stream2FieldTypes.Assign (value); }
Строка 61:}
Строка 62: