DataContext 始终只读,即使存在主键

问题描述 投票:0回答:1

我正在尝试更新数据库中的值,但 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);

不会抛出任何异常,它只是不执行任何操作。

谁能告诉我我在这里缺少什么?

c# .net linq linq-to-sql datacontext
1个回答
0
投票

看起来您使用了数据库优先方法,并且手动对实体进行建模。

  1. 如果您想继续手动建模,请尝试为 ID 属性设置
    [Key]
    属性,这将表明它是 PK。 - https://www.entityframeworktutorial.net/code-first/key-dataannotations-attribute-in-code-first.aspx
  2. 第二种方式 - 尝试使用工具自动生成模型 - https://www.entityframeworktutorial.net/entityframework6/create-entity-data-model.aspx
© www.soinside.com 2019 - 2024. All rights reserved.