相关疑难解决方法(0)

使用实体框架数据模型添加验证属性

前言2015年2月如果您仍在使用Entity Framework EDMX,请使用Entity Framework Code First代替您自己帮忙和结帐.不同之处在于您的表是从模型类创建的,而不是在使用表创建模型类的EDMX中创建的.这是一个全面的解决方案,这个问题中的问题甚至都不存在!

实体框架6入门代码首先使用MVC 5

我有一个现有的SQL数据库,我正在使用ADO.NET Enity Data Model作为模型.我正在尝试在我的MVC应用程序中构建一些CRUD功能.

在我找到的关于这个主题的所有教程中,他们从头开始构建模型并将属性添加到模型类中.例如:

    [Required]
    [StringLength(10)]
    public string Name { get; set; }
Run Code Online (Sandbox Code Playgroud)

但是,模型类是自动生成的,所以我认为更改它们是一个坏主意(如果刷新数据库模型,无论如何都会写入).

我如何添加验证属性?

entity-framework asp.net-mvc-4

24
推荐指数
2
解决办法
2万
查看次数

ASP.NET Core MetaDataType属性不起作用

我在我的域模型类上使用MetaDataType属性.它应该将属性信息从引用的类移动到已设置MetadataType属性的类中.但它没有像宣传的那样做.造成这个问题的原因是什么?

[MetadataType(typeof(ComponentModelMetaData))]
public partial class Component
{
    public int Id { get; set; }
    public string Name { get; set; }
    public ICollection<Repo> Repos { get; set; }
    public string Description { get; set; }   
}


public class ComponentModelMetaData
{
    [Required(ErrorMessage = "Name is required.")]
    [StringLength(30, MinimumLength = 3, ErrorMessage = "Name length should be more than 3 symbols.")]
    public string Name { get; set; }
    public ICollection<Repo> Repos { get; set; }
    [Required(ErrorMessage = "Description is required.")]
    public string …
Run Code Online (Sandbox Code Playgroud)

c# data-annotations asp.net-core

22
推荐指数
1
解决办法
1万
查看次数

为什么在web api中返回一个具有一对多关系的实体会导致错误?

伙计我和同一个类有一对多关系叫做user,
我在web apis get方法中返回一个用户实例,只要我没有任何方法就可以正常工作

User 

ID  | Name 
0   | A 
1   | B 

Friends Table ( This table is used to build the one to many relationship ) 

User_ID | Friend_ID 
 1      |     0 
 0      |     1 
Run Code Online (Sandbox Code Playgroud)

这是我的GetMethod

[HttpGet]
        public Models.User   Authenticate()
        {
            try
            {
                return   db.Users.SingleOrDefault(x => x.ID == 0 ) ; 
            } 
            catch
            {
                return null;
            }
        }
Run Code Online (Sandbox Code Playgroud)

如果我得到并返回一个用户实体,那么我得到了打击错误

任何人都可以帮我解决以下错误吗?

{"Message":"发生错误.","ExceptionMessage":"'ObjectContent`1'类型无法序列化内容类型'text/html; charset = utf-8'的响应正文.","ExceptionType ":"System.InvalidOperationException","StackTrace":null,"InnerException":{"消息":"发生错误.","ExceptionMessage":"使用类型'System.Data.Entity.DynamicProxies检测到自引用循环.Friend_E5C79F4736EB2750392FFC7061B18E9C12F15F9583409603C75C5D1B1F7358D4'.路径'Friends1 [0] .User.Friends'.","ExceptionType":"Newtonsoft.Json.JsonSerializationException","StackTrace":"at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.在Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeList(JsonWriter writer,IWrappedCollection值,JsonArrayContract契约,JsonProperty成员,JsonContainerContract collectionContract,CheckForCircularReference(JsonWriter writer,Object value,JsonProperty属性,JsonContract contract,JsonContainerContract containerContract,JsonProperty containerProperty)\ r \n) …

c# json asp.net-mvc-4 asp.net-web-api

11
推荐指数
2
解决办法
2万
查看次数

实体框架v4:通过更新模型向导防止存储模型覆盖

在我的Entity Framework v4项目中,我有一个包含两列的表,这些列由数据库计算(通过触发器等).为了让EF正确地将记录插入到表中,我必须在EF存储模型(StoreGeneratedPattern属性)中手动将列标记为"已计算",这是设计者不支持的 - 所以我必须制作手动编辑.EDMX文件中的XML.

问题是,每当我的数据库架构发生变化,并且我需要更新项目中的存储模型时,"更新模型向导"将覆盖.EDMX的整个存储模型部分,从而消除了我的手动更改.这意味着我必须保留这些更改的特殊列表,并在每次更新时手动重新应用它们!对于上帝的爱,这必须是EF中最愚蠢的故障之一.

无论如何,我对蜂巢的问题是这样的...有没有办法阻止存储模型覆盖?有没有办法标记数据库中的列,以便EF会自动将它们标记为计算?作为最后的手段,是否有一些非常简单的XML工具/技术可以在每次刷新后自动为我应用更改?

谢谢,哦,我学习StackOverflow贡献者,以缓解我的痛苦,并帮助我解决这个问题,即使我还没有在网站上的任何状态.总有一天,当我有4位数的声望时,我会记住你.

布赖恩


更新

内部人员告诉我,一个解决方案可能是查看"Designer Power Pack"(下面的链接),它允许您自定义存储模型的生成.到目前为止,我只是略读了这些信息,但在我看来,可能会有一两天的学习曲线来解决这个问题.有没有人对Designer Power Pack或任何其他想法有任何经验?

http://blogs.msdn.com/b/adonet/archive/2010/02/08/entity-designer-database-generation-power-pack.aspx

再次感谢,Brian

.net sql sql-server asp.net entity-framework

7
推荐指数
1
解决办法
1693
查看次数

如果EF 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中不存在...

提前致谢

entity-framework naming-conventions asp.net-mvc-4 entity-framework-5

5
推荐指数
1
解决办法
842
查看次数

OData V4使用词汇注释来传递数据注释

有谁知道如何在OData V4的metatdata中设置/读取基于词汇的注释来定义最大字符串长度之类的内容?

有一篇文章“ 客户端注释支持”,但没有显示任何示例代码,我不确定100%是否他们甚至在谈论数据注释。
它具有如下代码:

var person = dsc.People.ByKey("russellwhyte").GetValue();

// Try to get an annotation for a property
dsc.TryGetAnnotation<Func<ObservableCollection<string>>, string>(() => person.Emails, fullQualifiedTermName, qualifier, out annotation);
Run Code Online (Sandbox Code Playgroud)

但是它没有解释“ fullQualifiedTermName”或“ qualifier”使用什么。
我添加了“ odata.inculde-annotations = *”,但这似乎无济于事。

我也尝试了以下方法。

dsc.TryGetAnnotation<Func<string>, string>(() => person.FirstName, "System.ComponentModel.DataAnnotations", out annotation);
Run Code Online (Sandbox Code Playgroud)

但这只会返回null。

我从2012年开始在WCF数据服务中找到了“ 词汇表”,其中谈到了对验证元数据的支持。
我要试一下。
我希望在OData V4中有一种简单/更好的方法可以做到这一点。

Update 1
WCF词汇表示例在OData V4中不起作用,因为System.Web.Http.HttpConfiguration中缺少config.AnnotationsBuilder。

OData V4支持此处http://www.odata.org/vocabularies/所定义的词汇表,甚至还提供了我需要的“元数据注释可以为特定属性定义有效值范围”,但是似乎没有任何示例代码除了SAP https://blogs.sap.com/2013/10/07/vocabulary-based-annotations/之外的任何其他文章。

更新2
在查看TripPinService之后,我注意到它们在预算上有一些注释,如下所示。

<Property Name="Budget" Type="Edm.Single" Nullable="false">
    <Annotation Term="Org.OData.Measures.V1.ISOCurrency" String="USD"/>
    <Annotation Term="Org.OData.Measures.V1.Scale" Int="2"/>
</Property>
Run Code Online (Sandbox Code Playgroud)

幸运的是,该项目的源代码是ODataSamples TripPin。
在查看了服务之后,我发现我首先必须创建自己的xml词汇表文件。(ValidationVocabularies.xml) …

wcf-data-services odata data-annotations asp.net-web-api2 odata-v4

5
推荐指数
0
解决办法
1279
查看次数

数据库优先和视图模型

我对数据库优先模型以及如何使用 MVC 视图模型处理这些模型几乎没有经验。

很明显,我无法更改原始模型,但我想为模型添加一些注释以进行验证。

因此,我试图做的是创建一个从实体继承的 ViewModel

我的 DB First 生成的模型 - 不要修改

public partial class xmldata
{
    public string ISBN { get; set; }
    public string title { get; set; }
    public string blurb { get; set; }
    ...
}
Run Code Online (Sandbox Code Playgroud)

然后我创建了一个视图模型,如下所示,它继承自 xmldata

public class XmlDataViewModel : xmldata
{
    [AllowHtml]
    [Display(Name = "Blurb")]
    public string BlurbVm {
        get { return blurb; }
        set { blurb = value; }
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

上面显示的字段我需要 AllowHtml 和我迄今为止最好的解决方案,但是在控制器操作中,我仍然必须手动将 BlurbVm 字段映射回模糊,即使我认为上面的 setter 会处理它(我使用 Automapper对于其他领域)所以我很困惑为什么这不起作用。

此外,目前我正在控制器中进行验证,并且可能希望稍后对其进行重构以将它们移动到视图模型中,以便我可以使用 [Required] …

asp.net-mvc ef-database-first asp.net-mvc-4

0
推荐指数
1
解决办法
2216
查看次数