Ami*_*aqi 5 entity-framework naming-conventions asp.net-mvc-4 entity-framework-5
假设我有一个名为1的数据库Products
.因此,我将通过Db First方法在VS 2012中创建一个带有pluralize and singularize
选项的EF模型.
因此,模型Product
为我创建了一个实体,默认命名约定将此实体映射到dbo.Products
表.
现在我想改变这种行为.实际上我想创建一个自定义约定来将ProductModel
实体映射到dbo.Products
表.
这可能吗?!如果是这样,怎么样?
更新:我的目标是......
如您所知,每当您从数据库更新模型时,如果它导致模型发生更改,则自动生成的实体将被覆盖.
另一方面,我想将数据注释属性添加到实体属性,以便我可以使用它们来塑造我的视图,并希望简单地使用我的DbContext,如下面的插入:
public ActionResult Create(Product product)
{
if (ModelState.IsValid)
{
db.Products.Add(product);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(product);
}
Run Code Online (Sandbox Code Playgroud)
问题是我的应用程序分析没有完成,数据库更改次数.因此,我需要从数据库更新模型,之后,我的所有属性都将被删除.
所以我决定创建一个ProductModel
类并将Product
代码复制到它,并将视图作为视图模型传递给它.然后,当我想查询我的数据库时,我会得到一个异常,它说该dbo.ProductModels
名称在db中不存在...
提前致谢
默认情况下,数据库优先的方法始终将表名映射到同名的实体(可能是复数/单数)。目前 EF 中没有提供通过约定或工具进行调整的规定。您可以更改/调整/自定义您的模型 - 但如果重新生成它,这些更改就会丢失。我不知道有任何工具/脚本/黑客可以以某种方式“保留”这些更改并在从数据库重新生成模型后重新应用它们。
如果您需要扩展生成的类,我建议使用这些是部分类的事实- 您可以在第二个物理文件中扩展生成的类:
将其写入单独的文件中,例如ProductExtension.cs
:
public partial class Product
{
// add your custom methods etc. here
}
Run Code Online (Sandbox Code Playgroud)
组成该类的各种文件将由C# 编译器合并为一个类。
如果您需要向现有生成的类添加数据注释,您可以使用 MetadataType(..) 属性,如这个 SO 问题及其答案中所示:
将其写入单独的文件中,例如ProductExtension.cs
:
[MetadataType(typeof(ProductMetaData))]
public partial class Product
{
}
Run Code Online (Sandbox Code Playgroud)
然后在另一个文件中定义产品类的元数据/数据注释,ProductMetadata.cs
如下所示:
public class ProductMetaData
{
[Required]
public int RequestId {get;set;}
//...
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
842 次 |
最近记录: |