Entity Framework 4.1 - Code First with existing Da

2019-04-02 08:12发布

问题:

I have been studying the EF for a short time and cant find the answer to this question. I have existing database and I am using CodeFirst to create classes for the model.

What is the difference in using Attributes and EntityTypeConfiguration to define parameters of table columns?

Since the database already has defined foreign keys and unique constraints, and so on, how and where to implement the validation for a best and most fluid result for use in ASP.NET MVC3?

Is it better to implement Attributes and CustomValidation or to use TryCatch blocks to catch errors from db?

Does Validator.TryValidateObject(myModelObject, context, results, true); use validation rules defined only as Attributes or can it use rules defined in EntityTypeConfiguration?

Thank You

回答1:

See the following article about how you can create your entity classes from existing database :

http://blogs.msdn.com/b/adonet/archive/2011/03/15/ef-4-1-model-amp-database-first-walkthrough.aspx

Code generation templates will do the work for you, you don't need to write them if you have an existing db.

For validation, you can create new partial classes under the same namespace and put DataAnottations for your properties. Here is an example for you :

using System.ComponentModel.DataAnnotations;
using System.ComponentModel;

namespace TugberkUgurlu.App1.DataAccess.SqlServer {

    [MetadataType(typeof(Country.MetaData))]
    public partial class Country {

        private class MetaData {

            [Required]
            [StringLength(50)]
            [DisplayName("Name of Country")]
            public string CountryName { get; set; }

            [Required]
            [StringLength(5)]
            [DisplayName("ISO 3166 Code of Country")]
            public string CountryISO3166Code { get; set; }

            [DisplayName("Is Country Approved?")]
            public string IsApproved { get; set; }

        }
    }
}


回答2:

Get the Entity Framework Power Tools CTP1 and it will reverse engineer your database and create entities, and a full data mapping. This is different than Model or Database first in that it generates a fluent model rather than using an .edmx file. You can see exactly how it works then.



回答3:

-Since the database already has defined foreign keys and unique constraints, and so on, how and where to implement the validation for a best and most fluid result for use in ASP.NET MVC3?

These should happen via your generated model. Keys are automatically inferred. If you reverse engineer an existing database the attributes will be created for you. If not, there are basic rules that are followed. The entity framework will attempt to use an auto incrementing primary key for example unless you tell it otherwise via

   [DatabaseGenerated(System.ComponentModel.DataAnnotations.DatabaseGeneratedOption.None)]

The relationships are already part of your model so there is your referential integrity, and the data annotations will define the validation rules.

-Is it better to implement Attributes and CustomValidation or to use TryCatch blocks to catch errors from db?

Implement attributes. Define your metadata classes with your attributes in them. In addition you want to catch any db errors for anything else that is unexpected if your db has additional logic in there not defined in your model (try catch at some level should generally be used anyways for logging purposes_

-Does Validator.TryValidateObject(myModelObject, context, results, true); use validation rules defined only as Attributes or can it use rules defined in EntityTypeConfiguration?

As far as I'm aware only the attributes are used. I'm going to try to test this later though as I'd like a definite answer on this as well :)