Hướng dẫn sử dụng Entity Framework trong C#

Giới thiệu Entity Framework

Entity Framework phát hành đầu tiên vào năm 2008 nhằm hỗ trợ sự tương tác giữa các ứng dụng trên nền tảng .NET với các cơ sở dữ liệu quan hệ. Hay nói cách khác, nó là một công cụ giúp ánh xạ giữa các đối tượng trong phần mềm của bạn với các bảng của một cơ sở dữ liệu quan hệ.

Chuẩn bị

1/ Phần mềm Visual Studio

2/ Phần mềm SQL Server

Tạo project và cài đặt Entity Framework

1/ Tạo project: Mở Visual Studio -> tạo một project và đặt tên EntityFrameworkDemo

hướng dẫn sử dụng entity framework trong c#

2/ Cài đặt Entity Framework phiên bản mới nhất

Trong Solution Explorer, chuột phải lên project -> chọn Manage NuGet Packages…

Chọn Entity Framework -> chọn Install

Chọn OK

Chọn I Accept

Sau khi cài đặt thành công, chúng ta sẽ nhìn thấy thông báo như hình bên dưới

Hướng dẫn sử dụng Entity Framework trong C# – Chuẩn bị cơ sở dữ liệu

1/ Mở SQL Server Management Studio -> kết nối đến server

2/ Tạo một cơ sở dữ liệu tên EntityDB

3/ Tạo một table tên Student có 4 column là StudentID, StudentName, StudentGender và Address

Sử dụng Entity Framework

1/ Tạo ADO.NET Entity Data Model

Trong Solution Explorer, chuột phải lên project -> chọn Add -> chọn New Item…

Chọn Visual C# Items -> chọn ADO.NET Entity Data Model -> nhập DatabaseFirstModel ->chọn Add

Chọn  EF Designer from database -> chọn Next

Chọn kết nối hiện có hoặc chọn New Connection… để thiết lập kết nối mới.

Trường hợp chọn New Connection… -> chọn tên máy chủ (Server name), chọn cơ sở dữ liệu (Database name) -> chọn OK

Chọn Next

Chọn table và chọn Finish

Chọn 2 lần OK

Kết quả thu được sẽ như hình bên dưới. Lưu ý phải lưu DatabaseFirstModel.edmx trước khi thực hiện viết code

2/ Viết code: Mở Program.cs và nhập code như sau

3/ Mở SQL Server Management Studio -> mở bảng Student và thêm dữ liệu

4/ Build và run chương trình

Một số xử lý khác

1/ Thêm dữ liệu với Entity Framework

// Thông tin của sinh viên được thêm mới
var student = new Student();
student.StudentID = 3;
student.StudentName = "Lê Thị Hồng";
student.StudentGender = "Nam";
student.Address = "Bình Dương";
// Thêm vào database
using (var db = new EntityDBEntities()) 
{
   db.Students.Add(student);
   db.SaveChanges();
}
}

2/ Cập nhật dữ liệu Entity Framework (Cập nhật giới tính thành Nữ cho sinh viên có id là 3)

using (var db = new EntityDBEntities())
{
  var update = (from u in db.Students where u.StudentID == 3 select u).Single();
  u.StudentGender = "Nữ";
  db.SaveChanges();
}

3/ Xóa dữ liệu Entity Framework (Xóa sinh viên có id là 3)

using (var db = new EntityDBEntities())
{
  var delete = (from d in db.Students where d.StudentID == 3 select d).Single();
  db.Students.Remove(delete);
  db.SaveChanges();
}

Sưu tầm: Nguyễn Tuấn Khiêm

Nguồn: giasutinhoc.vn

Cách xử lý lỗi HRESULT 0xc8000222 khi cài .NET Framework 4

Sau đây mình xin giới thiệu cách xử lý một trong số lỗi thường gặp khi cài Net Framework 4.

HRESULT 0xc8000222 là một trong những lỗi mà bạn hay gặp phải khi cài Net Framework 4. Đơn giản là do cấu trúc phần mềm giữa máy tính và nền tảng không còn phù hợp, bạn hoàn toàn có thể tự tay mình xử lý lỗi này sau đó cài đặt lại Net framework 4.0 mà không ảnh hưởng gì đến máy tính.

Bước 1: Ẩn tổ hợp phím Windows + R gõ “cmd” rồi OK.

Bước 2: Trong cmd bạn nhập lệnh net stop WuAuServ để dừng windows update.

Bước 3: Làm lại bước 1 nhưng gõ vào “%mindir%” rồi OK.

Hoặc vào thư mục Windows trong ổ đĩa C.

Bước 4: Đổi tên thư mục SoftwareDistribution thành Sdold.

Bước 5: vào lại cmd theo hướng dẫn bước 1, nhập lệnh net start WuAuServ để khởi động lại windows update.

Sau khi hoàn tất bước trên là bạn có thể cài đặt được lại Net Frame Work 4 rồi.

Chia sẻ: Ngụy Kim Hưng

Nhúng Chrome trong C# App bằng CefSharp

Giới thiệu

Đã bao giờ cố gắng để tích hợp một trình duyệt web đáng tin cậy và nhanh chóng trong ứng dụng của bạn chỉ để nhảy qua vòng thử?

Trong mẹo này, bạn sẽ học cách dễ dàng để tích hợp thành phần trình duyệt web CefSharp tuyệt vời (dựa trên Chromium ) vào ứng dụng C # của bạn.

Sau đó, bạn có thể sử dụng trình duyệt web này:

  • Để cung cấp cho người dùng trải nghiệm duyệt web tích hợp
  • Thêm giao diện người dùng nhúng được lập trình trong HTML / JavaScript
  • Đối với tự động hóa web

CefSharp là đáng tin cậy, nhanh, hoàn toàn mã nguồn mở và không cần bất kỳ phụ thuộc thêm nào được cài đặt bởi người dùng cuối (ngoại trừ VC ++ Thời gian chạy 2013).

Trong hướng dẫn này, chúng tôi sẽ sử dụng một dự án WinForms nhưng CefSharp hoạt động bình đẳng với các dự án WPF.

Bắt đầu

Làm theo các bước sau để nhanh chóng bắt đầu với CefSharp.

Dự án

1. Tạo một dự án Windows Forms Application (C #) với .NET 4.5.2

2. Tên dự án của bạn (ví dụ: " CefTest")

DLL (Phương pháp NuGet)

3A) Nếu bạn sử dụng NuGet , bạn có thể thêm  CefSharp.WinForms  từ kho NuGet, và bỏ qua phương pháp thủ công dưới đây.

3B) Nếu bạn sử dụng NuGet, hãy điều hướng đến  SOLUTION> Configuration Manager và đặt dự án của bạn lên x86 hoặc x64 vì AnyCPU hiện không được hỗ trợ.

DLL (Phương pháp thủ công)

3A) Tải về các chương trình CefSharp và giải nén chúng.

3B) Nhấp chuột phải vào dự án của bạn và nhấp vào "Add Reference", sau đó chọn "Browse".

3C) Chọn các tệp DLL này:

  • CefSharp.dll
  • CefSharp.Core.dll
  • CefSharp.WinForms.dll

3D) Chọn tất cả các tệp trong ZIP:

3E) Sao chép các tệp này vào thư mục Debug của Project (bên trong Bin ):

CODE

4. Nhấp chuột phải vào biểu mẫu chính của bạn và chọn "View Code".

5. Thêm code sau đây:

Thêm các thư viện sau:

using CefSharp;
using CefSharp.WinForms;

Sao chép này vào phần mã của bạn:

public ChromiumWebBrowser browser;
public void InitBrowser(){
    Cef.Initialize(new CefSettings());
    browser = new ChromiumWebBrowser ("www.google.com");
    this.Controls.Add(browser);
    browser.Dock = DockStyle.Fill;
}

Gọi InitBrowser()ngay sau  InitializeComponent():

InitBrowser()

Code của bạn cuối cùng sẽ giống như sau:

Chạy!

6. Nhấn F5 và bạn sẽ thấy trang chủ Google!

Xử lý sự cố


Một ngoại lệ không được quản lý của loại 'System.IO.FileNotFoundException' xảy ra trong trình duyệt.exe 
Thông tin bổ sung: Không thể tải tập tin hoặc lắp ráp 'CefSharp.Core.dll' hoặc một trong những phụ thuộc của nó.

Nếu bạn gặp lỗi này, đảm bảo rằng bạn đã   cài đặt Visual C ++ 2013 Redistributable .

 


Một ngoại lệ không được quản lý của loại 'System.BadImageFormatException' xảy ra trong trình duyệt.exe 
Thông tin bổ sung: Không thể tải tệp hoặc lắp ráp 'CefSharp.Core, Phiên bản = 43.0.0.0, Văn hoá = trung lập, 

Nếu bạn gặp lỗi này, có nghĩa là bạn đang sử dụng máy tính 64-bit và ứng dụng của bạn được xây dựng trong chế độ AnyCPU. Bạn cần thay đổi chế độ này sang chế độ x86 hoặc x64:

  1. Mở bảng điều khiển giải pháp
  2. Nhấp chuột phải vào dự án của bạn> Thuộc tính dự án
  3. Nhấp vào tab Xây dựng
  4. Thay đổi Mục tiêu nền tảng thành x86 hoặc x64

 

<ảnh chụp màn hình không do tác giả cung cấp>

 

Trình duyệt Sharp

Nguyễn Tuấn Khiêm

Nguồn: www.codeproject.com

Dịch bởi: Google Tranlate

Tìm hiểu một số thẻ meta ( Hải Âu)

Meta tag là thẻ dùng để cung cấp các thông tin về website một cách tóm gọn đối với các trình duyệt lẫn người dùng hay bot từ các search engine. Hiện nay, có không ít người đang hiểu sai ý nghĩa của nó và ứng dụng đôi khi không hợp lý trong nhiều website. Dưới đây là một số thẻ thường dùng

    - Meta Description:

        Thẻ này dùng để mô tả nội dung của một trang web. Nội dung của thẻ này nên được viết ngắn gọn và xúc tích khoảng từ 20 đến 25 từ hoặc ít hơn. Đây là thẻ được hầu hết các SE sử dụng để hiển thị nội dung kết quả tìm kiếm.

        Ví dụ: HTML

             <META NAME=”description” CONTENT=”Website Khoa học kỹ thuật, giải trí và đời sống dành cho cộng đồng người Việt cùng chia sẽ kinh nghiệm và trao đổi học hỏi.”>

        Thẻ này được khuyến khích sử dụng và nên viết một cách xúc tích nhất nhằm thu hút người dùng bấm vào website của bạn từ kết quả tìm kiếm. Thông thường nếu không dùng thẻ này thì các SE như google cũng sẽ tự động tạo khi index nội dung website. Tuy nhiên bạn nên dùng bởi vì đôi khi các mô tả được index tự động sẽ không được như ý của bạn.

   - Meta Abstract:

        Cung cấp nội dung tóm tắt cho phần mô tả của website. Thẻ này chỉ được dùng để mô tả ngắn gọn hơn để bot có thể xác định được chính xác hơn nội dung website của bạn. Nội dung của thẻ này thường khoảng 10 từ trở lại.

         Ví dụ: HTML

              <META NAME=”Abstract” CONTENT="Noi dung mo ta website.">

    - Meta Keywords:

        Thẻ từ khóa được dùng để định dạng nội dung trang web. Từ khóa được sử dụng bởi các SE để index site của bạn có thêm thông tin từ các nội dung của title, body, và các thành phần khác. Từ này thường được dùng để cung cấp các từ khóa liên quan đồng nghĩa hoặc tương tự với các từ khóa của title.

           Ví dụ: Title của trang web cho bài viết này là “Tìm hiểu một số thẻ meta”. Bạn có thể ứng dụng keywords như sau:

             HTML

           <META NAME=”keywords” CONTENT=”khái niệm, quảng bá website, quảng bá web, tag, forum, technical, science, keyword, abstract”>

       Bạn nên sử dụng keywords một cách thận trong và bảo đảm sự tương thích với nội dung. Website của bạn có thể bị phạt hoặc đưa vào blacklist nếu bạn quá lạm dụng nó. Việc sử dụng keywords cũng có thể là một con dao hai lưỡi đối với bạn. Bạn có thể mất vài giờ để nghiên cứu cách viết keywords tốt nhất và đối thủ của bạn chỉ mất vài phút để thừa hưởng từ bạn.

      Trong bài viết tuy rất cần lối viết tự nhiên nhưng làm gì thì cũng cần có quy tắc. vậy nên muốn bài viết lên top, muốn thẻ meta description chuẩn seo thì cần phải tuân thủ một vài quy tắc sau:

  1. Miêu tả nội dung chân thực của bài viết
  2. Viết không quá 140 ký tự (lưu ý là ký tự chứ không phải chữ )
  3. Viết càng câu dẫn, càng lôi kéo càng tốt, có thể nói quá nhưng không được nói sai.
  4. Lưu ý rằng mỗi thẻ meta của một bài viết cần khác biệt với tất cả những thẻ meta khác.
  5. Thẻ meta description cần chứa từ khóa và từ khóa nên in đậm để thu hút sự chú ý.
  6. Viết thẻ meta theo kiểu liệt kê thông tin liên quan và quan trọng chứ không nên nhồi nhét thông tin hay từ khóa.

Giới thiệu về filesystem storage trong Laravel

Laravel Storage

Laravel cung cấp cho ta một lớp abstraction filesystem mạnh mẽ do sử dụng package Flysystem tạo bởi Frank de Jonge. Tích hợp Flysystem vào Laravel với cách sử dụng rất đơn giản để giao tiếp với các local filesystem, Amazon S3, và Rackspace Cloud Storage. Thậm chí còn có thể switch các storage một cách dễ dàng sử dụng chung API.

Lợi ích của Laravel storage:

- Việc lưu trữ các file sẽ tốn rất nhiều tài nguyên và băng thông trên server, giải pháp đưa ra là lưu trữ trên các server bên ngoài nên Laravel Storage được tích hợp hỗ trợ lưu trữ file trên server ngoài như Amazon S3.

- Đơn giản hóa trong việc thiết lập các tùy chon.

Cấu hình (Config):

File cấu hình được đặt tại "config/filesystems.php"  và được thiết lập sẵn như sau.

    /*
    |--------------------------------------------------------------------------
    | Default Filesystem Disk
    |--------------------------------------------------------------------------
    */

    'default' => env('FILESYSTEM_DRIVER', 'local'),

    /*
    |--------------------------------------------------------------------------
    | Default Cloud Filesystem Disk
    |--------------------------------------------------------------------------
    */

    'cloud' => env('FILESYSTEM_CLOUD', 's3'),

    /*
    |--------------------------------------------------------------------------
    | Filesystem Disks
    |--------------------------------------------------------------------------
    */

    'disks' => [

        'local' => [
            'driver' => 'local',
            'root' => storage_path('app'),
        ],

        'public' => [
            'driver' => 'local',
            'root' => storage_path('app/public'),
            'url' => env('APP_URL').'/storage',
            'visibility' => 'public',
        ],

        's3' => [
            'driver' => 's3',
            'key' => env('AWS_KEY'),
            'secret' => env('AWS_SECRET'),
            'region' => env('AWS_REGION'),
            'bucket' => env('AWS_BUCKET'),
        ],

    ],

 

 Với Local Driver

Khi thao tác tới file sẽ tương tác tới thư mục root được khai báo trong file, giá trị mặc định được trỏ tới storage/app. Do đó với đoạn code sau file sẽ được lưu trong storage/app/file.txt:

    Storage::disk('local')->put('file.txt', 'Contents');

Với config driver là S3 hoặc Rackspace cần cài đặt các package như yêu cầu thông qua composer

  • Amazon S3: league/flysystem-aws-s3-v3 ~1.0
  • Rackspace: league/flysystem-rackspace ~1.0

Cấu hình cho FTP Driver

Mặc định FTP driver không được cấu hình mặc định trong filesystems.php. Bạn có thể sử dụng ví dụ cấu hình dưới đây như Laravel Docs:

    'ftp' => [
		'driver'   => 'ftp',
		'host'     => 'ftp.example.com',
		'username' => 'your-username',
		'password' => 'your-password',

		// Optional FTP Settings...
		// 'port'     => 21,
		// 'root'     => '',
		// 'passive'  => true,
		// 'ssl'      => true,
		// 'timeout'  => 30,
	]

Cấu hình cho Rackspace Driver

Cũng giống như FTP, Rackspace driver cũng không được config sẵn trong file filesystems.php.

Các bạn có thể tham khảo cấu hình sau:

    'rackspace' => [
		'driver'    => 'rackspace',
		'username'  => 'your-username',
		'key'       => 'your-key',
		'container' => 'your-container',
		'endpoint'  => 'https://identity.api.rackspacecloud.com/v2.0/',
		'region'    => 'IAD',
		'url_type'  => 'publicURL',
	]

Để sử dụng thư việc Storage các bạn đừng quên khai báo thư viện:

use Illuminate\Support\Facades\Storage;

Sau khi khai báo thư viện các bạn có thể tương tác với các disk đã được cấu hình.

	$disk = Storage::disk('local');
	// or
	$disk2 = Storage::disk('s3');

 

Giới thiệu các hàm cơ bản:

  • get(): Được dùng để lấy nội dung của một file:
$contents = Storage::get('file.txt');
  • exists(): Kiểm tra sự tồn tại của 1 file:
$exists = Storage::disk('local')->exists('file.txt');
  • url(): Để lấy URL của file. Nếu bạn sử dụng local driver, nó sẽ tự động thêm vào "/storage" cho path và trả về một relative URL của file. Nếu bạn sử dụng s3 driver, URL đầy đủ sẽ được trả về.

Chú ý: Khi sử dụng local driver, hãy chắc chắn tạo một symbolic link tại public/storage trỏ tới thư mục storage/app/public.

$url = Storage::url('file.txt');
  • size(): Trả về kích thước của file, đơn vị là bytes:
$size = Storage::size('file.txt');
  • lastModified(): Trả về giá trị UNIX timestamp của lần cuối cùng file bị thay đổi:
$time = Storage::lastModified('file.txt');
  • put(): Có thể được dùng để lưu file lên disk. Ta cũng có thể truyền một PHP resource cho hàm put, nó sẽ sử dụng stream của Flysystem. Bạn nên sử dụng stream khi phải làm việc với file lớn:
Storage::put('file.txt', $contents);
Storage::put('file.txt', $resource);
  • copy(): Dùng để copy một file đang tồn tại sang một vị trí mới trên disk:
Storage::copy('old/file.txt', 'new/file.txt');
  • move(): Dùng để đổi tên hay di chuyển một file đang tồn tại tới vị trí mới:
Storage::move('old/file.txt', 'new/file.txt');
  • prepend(): Thêm nội dung vào đầu 1 file:
Storage::prepend('file.txt', 'Prepended Text');
  • append(): Chèn thêm nội dung vào cuối file:
Storage::append('file.txt', 'Appended Text');
  • delete(): Xoá file khỏi disk, bạn có thể xóa 1 file hoặc 1 mảng các file:
Storage::delete('file.txt');
Storage::delete(['file1.txt', 'file2.txt']);
  • files(): Trả về một mảng các files trong một thư mục.
$files = Storage::files($directory);
  • allFiles(): Sẽ lấy danh sách tất cả các file trong một thư mục bao gồm các thư mục con:
$files = Storage::allFiles($directory);
  • directories(): Sẽ trả về một mảng gồm tất cả các thư mục bên trong một thư mục.
$directories = Storage::directories($directory);
  • allDirectories(): Hàm này lấy về danh sách tất cả các thư mục trong một thư mục và các thư mục con của nó:
$directories = Storage::allDirectories($directory);
  • makeDirectory(): Sẽ tạo một thư mục mới, bao gồm các thư mục con cần thiết:
Storage::makeDirectory($directory);
  • deleteDirectory(): Xoá một thư mục, bao gồm tất cả các file của nó:
Storage::deleteDirectory($directory);
  • download(): Tải file về máy tính.
return Storage::download('file.jpg');

Mong rằng qua bài này sẽ giúp các bạn hiểu hơn về Storage trong Laravel. Các bạn có thể xây dựng một hệ thống quản lý các media của mình trên server một cách dễ dàng hơn. Chúc các bạn thành công trong lập trình Laravel.

Ngụy Kim Hưng