我正在使用實體框架來幫助存儲一些我用C#編寫的實體來創建一個簡單的Web應用程序。我想知道如何將一個屬性(字段)添加到一個實體,而無需將其編碼到實體類中。就拿我的員工實體,例如:如何使用方法將屬性添加到實體而不是硬編碼(使用實體框架)?
public class Employee : Person
{
public int OfficeID { get; set; }
public DateTime HireDate { get; set; }
public string JobTitle { get; set; }
public int Salary { get; set; }
public virtual Office Office { get; set; }
}
現在,讓我們說,我想員工的實體也有描述員工認證一個
string Certifications
財產。我可以把它寫在我定義工資的路線下面。
不過,我需要能夠實現的功能,使用戶可以添加使用Web應用程序,這意味着它不能僅僅是硬編碼的屬性。什麼我想象的是,有一個「添加屬性」按鈕,當用戶點擊它,他們必須:
- 到自己想要加的屬性選擇實體(如僱員實體)
- 寫屬性的名稱以及它的類型(例如證書,字符串)
- 寫此屬性的值(例如「正式認證爲OK程序員」)
我是新來的所有對此,請耐心等待,但對我而言,我可以編寫一種接受用戶輸入法的方法並不直觀t代表實體,屬性名稱和類型以及屬性值,然後將其添加到該實體中,使其成爲與實體類中硬編碼的其他屬性一樣的屬性。如果有人對如何在運行時添加持久屬性並將它們鏈接到實體上有任何建議,我會非常感激,因此它們的功能就好像它們是像實體類一樣在原始屬性中編碼。
我有一個方法,它允許用戶編輯了「辦公室」實體(credit to Tom Dykstra's Entity Framework 6 tutorial at asp.net)的屬性之一的值:
[HttpPost, ActionName("Edit")]
[ValidateAntiForgeryToken]
public ActionResult EditPost(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
var officeToUpdate = db.Offices.Find(id);
if (TryUpdateModel(officeToUpdate, "",
new string[] { "Address", "BusinessName" }))
{
try
{
db.SaveChanges();
return RedirectToAction("Index");
}
catch (DataException /* dex */)
{
//Log the error (uncomment dex variable name and add a line here to write a log.
ModelState.AddModelError("", "Unable to save changes. Try again, and if the problem persists, see your system administrator.");
}
}
return View(officeToUpdate);
}
然而,而不是簡單的編輯的屬性之一的值,我我問如何編輯實體,以便添加一個全新的屬性+值。我希望我的帖子夠清楚。
感謝您花時間思考這個問題。我想我明白你在說什麼 - 我會嘗試類似於你所描述的內容,看看有沒有其他的東西。 – Drew
對不起,我是使用堆棧溢出的新手。我怎麼做?我沒有看到接受答案按鈕或任何東西(如果這就是你正在談論的)。我也會upvote你的答案,但我沒有15聲望哈哈。編輯:它是分數下的勾號按鈕嗎?我只是點了那個 – Drew