我正在尝试更新数据库中的值,但 IsReadOnly 属性始终返回 True。 根据微软,该属性
获取一个值,该值指示此 Table 实例中包含的实体的类型是否具有主键
问题是,我的数据库确实有 PK 集。
数据库定义:
CREATE TABLE TestTable
(
ID int NOT NULL PRIMARY KEY,
Value varchar(50) NOT NULL
);
INSERT INTO TestTable (ID, Value)
VALUES (1, '6caaef02-fc34-4112-9574-4c5923c5624d');
LINQ 对象定义:
[Table( Name = "TestTable" )]
public class TestTable
{
[Column] public int ID { get; set; }
[Column] public string Value { get; set; }
}
修改代码:
DataContext db = new DataContext(ConnStr); // Just a standard SQL Server connection string
var b = db.GetTable<TestTable>().IsReadOnly; // Always 'True'
var firstResult = db.GetTable<TestTable>().FirstOrDefault();
Console.WriteLine( firstResult.ID + " " + firstResult.Value ); // The current DB value logs here correctly
firstResult.Value = Guid.NewGuid().ToString();
db.GetTable<TestTable>().Single(c => c.ID == 1).Value = Guid.NewGuid().ToString();
var x = db.GetChangeSet(); // Always {{Inserts: 0, Deletes: 0, Updates: 0}}
db.SubmitChanges(ConflictMode.FailOnFirstConflict);
不会抛出任何异常,它只是不执行任何操作。
谁能告诉我我在这里缺少什么?
看起来您使用了数据库优先方法,并且手动对实体进行建模。
[Key]
属性,这将表明它是 PK。 - https://www.entityframeworktutorial.net/code-first/key-dataannotations-attribute-in-code-first.aspx
[Column]
属性 - https://www.entityframeworktutorial.net/code-first/column-dataannotations-attribute-in-code-first.aspx