qua*_*els 2 c# linq asp.net asp.net-mvc linq-to-sql
我在LINQ to SQL,ASP.NET MVC和C#工作.我有一个名为genesisRepository连接数据库的存储库.
我有一个表在一个名为Stream的对象中的表.它的定义如下:
[Table]
public class Stream
{
[HiddenInput(DisplayValue = false)]
[Column(IsPrimaryKey = true, IsDbGenerated = true, AutoSync = AutoSync.OnInsert)]
public long StreamID { get; set; }
[Required(ErrorMessage = "Please enter a stream name")]
[Column]
public string StreamName { get; set; }
/* Other columns removed for brevity */
[Required(ErrorMessage = "Please enter a stream URL")]
[Column]
public string StreamUrl { get; set; }
private EntitySet<StreamEntry> _StreamEntry;
[System.Data.Linq.Mapping.Association(Storage = "_StreamEntry", OtherKey = "StreamID")]
public EntitySet<StreamEntry> StreamEntry
{
get { return this._StreamEntry; }
set { this._StreamEntry.Assign(value); }
}
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); }
}
}
Run Code Online (Sandbox Code Playgroud)
我在我的控制器中有一个测试操作,用于在我的Stream表中创建新记录.
public ActionResult StreamTest()
{
// create new stream
var stream = new Genesis.Domain.Entities.Stream();
stream.StreamUrl = "url";
stream.StreamName = "name";
stream.StreamBody = null;
stream.StreamTitle = null;
stream.StreamKeywords = null;
stream.StreamDescription = null;
genesisRepository.CreateStream(stream);
return View("Index");
}
Run Code Online (Sandbox Code Playgroud)
该函数genesisRepository()如下所示:
public long CreateStream(Stream stream)
{
streamTable.InsertOnSubmit(stream);
streamTable.Context.SubmitChanges();
return stream.StreamID;
}
Run Code Online (Sandbox Code Playgroud)
我执行ActionResult时得到一个空引用错误StreamTest().genesisRepository不为null.streamTable不为null,新创建的对象stream显然也不为null.我唯一能想到的就是null是EntitySet<T>定义外来关系的属性.
所以,我将ActionResult代码修改为:
public ActionResult StreamTest()
{
// create new stream
var stream = new Genesis.Domain.Entities.Stream();
stream.Stream2FieldTypes = new EntitySet<Stream2FieldTypes>(); // new
stream.StreamEntry = new EntitySet<StreamEntry>(); // new
stream.StreamUrl = "url";
stream.StreamName = "name";
stream.StreamBody = null;
stream.StreamTitle = null;
stream.StreamKeywords = null;
stream.StreamDescription = null;
genesisRepository.CreateStream(stream); // CreateStream() returns ID as long
return View("Index");
}
Run Code Online (Sandbox Code Playgroud)
但是当我尝试这个时,我收到了这个错误:
Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.
Source Error:
Line 58: {
Line 59: get { return this._Stream2FieldTypes; }
Line 60: set { this._Stream2FieldTypes.Assign(value); } <-- the offending line
Line 61: }
Line 62:
Source File: C:\path\to\Stream.cs Line: 60
Run Code Online (Sandbox Code Playgroud)
我可以使用创建新记录streamTable.Context.ExecuteCommand("INSERT INTO genesis.dbo.Stream (StreamName, StreamUrl) VALUES ('Name', 'url');");.
我不明白如何从这里前进.我怎样才能简单地创建一个新记录Stream?
请尝试以下方法.在您的类声明中替换它:
public class Stream
{
private EntitySet<StreamEntry> _StreamEntry;
private EntitySet<Stream2FieldTypes> _Stream2FieldTypes;
}
Run Code Online (Sandbox Code Playgroud)
有了这个:
public class Stream
{
private EntitySet<StreamEntry> _StreamEntry = new EntitySet<StreamEntry>();
private EntitySet<Stream2FieldTypes> _Stream2FieldTypes = new EntitySet<Stream2FieldTypes>();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1795 次 |
| 最近记录: |