我可以在更新方案中使用带有EntityFramework的CLIMutable记录吗?

时间:2014-05-19 17:53:51

标签: entity-framework f#

我正在尝试将带有CLIMutable属性的F#记录类型用作具有Entity Framework的实体。选择实体和添加新实体工作正常,但更新实体存在问题。显然我不能使用赋值运算符(&lt ;-)来为可变记录类型的字段赋值。

有没有办法对现有记录的字段进行分配?

[<CLIMutable>]
[<Table("UserProfile")>]
type UserProfile = {
    [<Key>]
    Id : int    
    Username : string }

type Context() =
    inherit DbContext(connectionString)

    [<DefaultValue>]
    val mutable private _users : DbSet<UserProfile>

    member this.Users
        with get() = this._users and set(v) = this._users <- v

let updateUsername id username =
    use context = new Context()
    let user = context.Users.Find(id : int)
    user.Username <- username //This line does not compile
    context.SaveChanges()

1 个答案:

答案 0 :(得分:2)

来自documentation

type Car = {
    Make : string
    Model : string
    mutable Odometer : int
    }
let myCar = { Make = "Fabrikam"; Model = "Coupe"; Odometer = 108112 }
myCar.Odometer <- myCar.Odometer + 21

CLIMutable属性存在,以便框架等可以填充记录。如果您需要自己修改记录,只需通知F#编译器您希望能够更新该字段。